diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-01-04 12:53:30 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-01-04 12:53:30 -0800 |
commit | 5a2107d1745af3386300e4a3f7617cad4b6b2779 (patch) | |
tree | 8ec16a4274bb5f2e70abe6ff9f0b88cc6566ecd8 | |
parent | 78693e0a1c7d672877e1d689eacad834667aa306 (diff) | |
parent | 7abb0c911a7c3d60057fbcab6fc3687322a67082 (diff) | |
download | scala-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.scala | 22 |
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 } } |