diff options
author | Paul Phillips <paulp@improving.org> | 2010-04-27 19:27:04 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-04-27 19:27:04 +0000 |
commit | af4338c2b2c443fbca53ee937faaef2dfc0748c8 (patch) | |
tree | 5ad061b2176c46dda4fc1538f0ab600bdc3a937c | |
parent | 1f7165c5d4b949078432af79fe4ea1e09b7d77da (diff) | |
download | scala-af4338c2b2c443fbca53ee937faaef2dfc0748c8.tar.gz scala-af4338c2b2c443fbca53ee937faaef2dfc0748c8.tar.bz2 scala-af4338c2b2c443fbca53ee937faaef2dfc0748c8.zip |
Added size hints to builders where possible wit...
Added size hints to builders where possible without introducing new
methods. Closes #3331, review by community.
-rw-r--r-- | src/library/scala/collection/Iterator.scala | 3 | ||||
-rw-r--r-- | src/library/scala/collection/generic/TraversableFactory.scala | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/library/scala/collection/Iterator.scala b/src/library/scala/collection/Iterator.scala index 24c447b24b..cbbaf0058c 100644 --- a/src/library/scala/collection/Iterator.scala +++ b/src/library/scala/collection/Iterator.scala @@ -11,8 +11,7 @@ package scala.collection -import mutable.{Buffer, ArrayBuffer, ListBuffer, StringBuilder} -import immutable.{List, Stream} +import mutable.ArrayBuffer import annotation.{ tailrec, migration } /** The `Iterator` object provides various functions for diff --git a/src/library/scala/collection/generic/TraversableFactory.scala b/src/library/scala/collection/generic/TraversableFactory.scala index b7fda70922..ffc4f16466 100644 --- a/src/library/scala/collection/generic/TraversableFactory.scala +++ b/src/library/scala/collection/generic/TraversableFactory.scala @@ -62,6 +62,10 @@ abstract class TraversableFactory[CC[X] <: Traversable[X] with GenericTraversabl */ def concat[A](xss: Traversable[A]*): CC[A] = { val b = newBuilder[A] + // At present we're using IndexedSeq as a proxy for "has a cheap size method". + if (xss forall (_.isInstanceOf[IndexedSeq[_]])) + b.sizeHint(xss map (_.size) sum) + for (xs <- xss) b ++= xs b.result } @@ -73,6 +77,7 @@ abstract class TraversableFactory[CC[X] <: Traversable[X] with GenericTraversabl */ def fill[A](n: Int)(elem: => A): CC[A] = { val b = newBuilder[A] + b.sizeHint(n) var i = 0 while (i < n) { b += elem @@ -130,6 +135,7 @@ abstract class TraversableFactory[CC[X] <: Traversable[X] with GenericTraversabl */ def tabulate[A](n: Int)(f: Int => A): CC[A] = { val b = newBuilder[A] + b.sizeHint(n) var i = 0 while (i < n) { b += f(i) @@ -201,6 +207,7 @@ abstract class TraversableFactory[CC[X] <: Traversable[X] with GenericTraversabl def range(start: Int, end: Int, step: Int): CC[Int] = { if (step == 0) throw new IllegalArgumentException("zero step") val b = newBuilder[Int] + b.sizeHint(Range.count(start, end, step, false)) var i = start while (if (step < 0) end < i else i < end) { b += i @@ -218,6 +225,7 @@ abstract class TraversableFactory[CC[X] <: Traversable[X] with GenericTraversabl */ def iterate[A](start: A, len: Int)(f: A => A): CC[A] = { val b = newBuilder[A] + b.sizeHint(len) var acc = start var i = 0 while (i < len) { |