diff options
author | Rex Kerr <ichoran@gmail.com> | 2014-12-26 17:54:50 -0800 |
---|---|---|
committer | Rex Kerr <ichoran@gmail.com> | 2015-02-16 12:36:22 -0800 |
commit | ad7a2f2d497c59eb61284447b38ea2697f9ab738 (patch) | |
tree | 8c66ec20727c670d49235627c325e0dc67e82a52 | |
parent | da49d9a00ec373a0e7f2ffe946a897a65c9b0741 (diff) | |
download | scala-ad7a2f2d497c59eb61284447b38ea2697f9ab738.tar.gz scala-ad7a2f2d497c59eb61284447b38ea2697f9ab738.tar.bz2 scala-ad7a2f2d497c59eb61284447b38ea2697f9ab738.zip |
Optimization of IterableLike.scala
Changed takeRight to have two tighter loops instead of one with a conditional. See about 10% performance improvement.
Other changes were (surprisingly, in some cases) not a win. Overall, IterableLike is pretty well optimized.
-rw-r--r-- | src/library/scala/collection/IterableLike.scala | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/library/scala/collection/IterableLike.scala b/src/library/scala/collection/IterableLike.scala index 7643b84a8b..ecf64624e8 100644 --- a/src/library/scala/collection/IterableLike.scala +++ b/src/library/scala/collection/IterableLike.scala @@ -218,12 +218,12 @@ self => val b = newBuilder b.sizeHintBounded(n, this) val lead = this.iterator drop n - var go = false - for (x <- this) { - if (lead.hasNext) lead.next() - else go = true - if (go) b += x + val it = this.iterator + while (lead.hasNext) { + lead.next() + it.next() } + while (it.hasNext) b += it.next() b.result() } @@ -283,7 +283,7 @@ self => var i = 0 for (x <- this) { b += ((x, i)) - i +=1 + i += 1 } b.result() } |