summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-01-04 12:53:30 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-01-04 12:53:30 -0800
commit5a2107d1745af3386300e4a3f7617cad4b6b2779 (patch)
tree8ec16a4274bb5f2e70abe6ff9f0b88cc6566ecd8
parent78693e0a1c7d672877e1d689eacad834667aa306 (diff)
parent7abb0c911a7c3d60057fbcab6fc3687322a67082 (diff)
downloadscala-5a2107d1745af3386300e4a3f7617cad4b6b2779.tar.gz
scala-5a2107d1745af3386300e4a3f7617cad4b6b2779.tar.bz2
scala-5a2107d1745af3386300e4a3f7617cad4b6b2779.zip
Merge pull request #1825 from magarciaEPFL/fusion-Range-foreach
fusion of loops in Range.foreach() and Range.validateRangeBoundaries()
-rw-r--r--src/library/scala/collection/immutable/Range.scala22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala
index 02c10700b1..480c88ddcf 100644
--- a/src/library/scala/collection/immutable/Range.scala
+++ b/src/library/scala/collection/immutable/Range.scala
@@ -112,6 +112,7 @@ extends scala.collection.AbstractSeq[Int]
fail()
}
+ @deprecated("Range.foreach() is now self-contained, making this auxiliary method redundant.", "2.10.1")
def validateRangeBoundaries(f: Int => Any): Boolean = {
validateMaxLength()
@@ -134,14 +135,19 @@ extends scala.collection.AbstractSeq[Int]
}
@inline final override def foreach[@specialized(Unit) U](f: Int => U) {
- if (validateRangeBoundaries(f)) {
- var i = start
- val terminal = terminalElement
- val step = this.step
- while (i != terminal) {
- f(i)
- i += step
- }
+ validateMaxLength()
+ val isCommonCase = (start != Int.MinValue || end != Int.MinValue)
+ var i = start
+ var count = 0
+ val terminal = terminalElement
+ val step = this.step
+ while(
+ if(isCommonCase) { i != terminal }
+ else { count < numRangeElements }
+ ) {
+ f(i)
+ count += 1
+ i += step
}
}