summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-04-27 19:27:04 +0000
committerPaul Phillips <paulp@improving.org>2010-04-27 19:27:04 +0000
commitaf4338c2b2c443fbca53ee937faaef2dfc0748c8 (patch)
tree5ad061b2176c46dda4fc1538f0ab600bdc3a937c /src/library
parent1f7165c5d4b949078432af79fe4ea1e09b7d77da (diff)
downloadscala-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.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/collection/Iterator.scala3
-rw-r--r--src/library/scala/collection/generic/TraversableFactory.scala8
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) {