diff options
author | Paul Phillips <paulp@improving.org> | 2011-07-04 04:55:04 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2011-07-04 04:55:04 +0000 |
commit | 54b26beb2c9a82fc5a1b3a66f11ed763bfad39be (patch) | |
tree | 111a2081507c084b81918216cdfdaf185605961a /src/library/scala/collection/immutable | |
parent | 69b9d9858e6127d021e083d336e9629c12173698 (diff) | |
download | scala-54b26beb2c9a82fc5a1b3a66f11ed763bfad39be.tar.gz scala-54b26beb2c9a82fc5a1b3a66f11ed763bfad39be.tar.bz2 scala-54b26beb2c9a82fc5a1b3a66f11ed763bfad39be.zip |
Discovered another impressive source of unneces...
Discovered another impressive source of unnecessary garbage is every
collection creating a new GenericCanBuildFrom for every map ever
performed. They can all use the same one: they all have the same
implementation. It looks like tiark had already figured this out and
done it for Vector: I followed with the other fifty. I really haven't
the least idea who to have review most things. No review.
Diffstat (limited to 'src/library/scala/collection/immutable')
13 files changed, 14 insertions, 20 deletions
diff --git a/src/library/scala/collection/immutable/GenIterable.scala.disabled b/src/library/scala/collection/immutable/GenIterable.scala.disabled index 252c721271..858abd27aa 100644 --- a/src/library/scala/collection/immutable/GenIterable.scala.disabled +++ b/src/library/scala/collection/immutable/GenIterable.scala.disabled @@ -31,7 +31,7 @@ trait GenIterable[+A] extends GenTraversable[A] // object GenIterable extends TraversableFactory[GenIterable] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenIterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenIterable[A]] = Iterable.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenSeq.scala.disabled b/src/library/scala/collection/immutable/GenSeq.scala.disabled index 36aff8f8e6..5b59418b9f 100644 --- a/src/library/scala/collection/immutable/GenSeq.scala.disabled +++ b/src/library/scala/collection/immutable/GenSeq.scala.disabled @@ -39,7 +39,7 @@ trait GenSeq[+A] extends GenIterable[A] // object GenSeq extends SeqFactory[GenSeq] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenSeq[A]] = Seq.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenSet.scala.disabled b/src/library/scala/collection/immutable/GenSet.scala.disabled index 3cca6ba66e..dc921b5245 100644 --- a/src/library/scala/collection/immutable/GenSet.scala.disabled +++ b/src/library/scala/collection/immutable/GenSet.scala.disabled @@ -38,6 +38,6 @@ trait GenSet[A] extends GenIterable[A] // object GenSet extends TraversableFactory[GenSet] { -// implicit def canBuildFrom[A] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A] = Set.newBuilder // } diff --git a/src/library/scala/collection/immutable/GenTraversable.scala.disabled b/src/library/scala/collection/immutable/GenTraversable.scala.disabled index 2ee9bd9d8c..4a5cf12ebe 100644 --- a/src/library/scala/collection/immutable/GenTraversable.scala.disabled +++ b/src/library/scala/collection/immutable/GenTraversable.scala.disabled @@ -34,7 +34,7 @@ trait GenTraversable[+A] extends scala.collection.GenTraversable[A] // object GenTraversable extends TraversableFactory[GenTraversable] { -// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenTraversable[A]] = new GenericCanBuildFrom[A] +// implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, GenTraversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] // def newBuilder[A]: Builder[A, GenTraversable[A]] = Traversable.newBuilder // } diff --git a/src/library/scala/collection/immutable/IndexedSeq.scala b/src/library/scala/collection/immutable/IndexedSeq.scala index 9945f6f0e7..2b06c950fa 100644 --- a/src/library/scala/collection/immutable/IndexedSeq.scala +++ b/src/library/scala/collection/immutable/IndexedSeq.scala @@ -35,6 +35,6 @@ object IndexedSeq extends SeqFactory[IndexedSeq] { def length = buf.length def apply(idx: Int) = buf.apply(idx) } - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, IndexedSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, IndexedSeq[A]] = Vector.newBuilder[A] } diff --git a/src/library/scala/collection/immutable/Iterable.scala b/src/library/scala/collection/immutable/Iterable.scala index 81579ef3b7..d5fca2bdff 100644 --- a/src/library/scala/collection/immutable/Iterable.scala +++ b/src/library/scala/collection/immutable/Iterable.scala @@ -38,6 +38,6 @@ trait Iterable[+A] extends Traversable[A] * @define coll immutable iterable collection */ object Iterable extends TraversableFactory[Iterable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Iterable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Iterable[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/LinearSeq.scala b/src/library/scala/collection/immutable/LinearSeq.scala index ab8b63238d..e2e2d97588 100644 --- a/src/library/scala/collection/immutable/LinearSeq.scala +++ b/src/library/scala/collection/immutable/LinearSeq.scala @@ -31,6 +31,6 @@ trait LinearSeq[+A] extends Seq[A] * @define Coll immutable.LinearSeq */ object LinearSeq extends SeqFactory[LinearSeq] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, LinearSeq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, LinearSeq[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/List.scala b/src/library/scala/collection/immutable/List.scala index 563f14eac6..1781e7ba36 100644 --- a/src/library/scala/collection/immutable/List.scala +++ b/src/library/scala/collection/immutable/List.scala @@ -426,7 +426,8 @@ object List extends SeqFactory[List] { import scala.collection.{Iterable, Seq, IndexedSeq} /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, List[A]] = + ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, List[A]] = new ListBuffer[A] diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala index bf5dc6816a..e09e4b7196 100644 --- a/src/library/scala/collection/immutable/Queue.scala +++ b/src/library/scala/collection/immutable/Queue.scala @@ -144,7 +144,7 @@ class Queue[+A] protected(protected val in: List[A], protected val out: List[A]) */ object Queue extends SeqFactory[Queue] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Queue[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Queue[A]] = new ListBuffer[A] mapResult (x => new Queue[A](Nil, x.toList)) override def empty[A]: Queue[A] = EmptyQueue.asInstanceOf[Queue[A]] override def apply[A](xs: A*): Queue[A] = new Queue[A](Nil, xs.toList) diff --git a/src/library/scala/collection/immutable/Seq.scala b/src/library/scala/collection/immutable/Seq.scala index 11e56df354..882ca12612 100644 --- a/src/library/scala/collection/immutable/Seq.scala +++ b/src/library/scala/collection/immutable/Seq.scala @@ -41,6 +41,6 @@ trait Seq[+A] extends Iterable[A] */ object Seq extends SeqFactory[Seq] { /** genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Seq[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Seq[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/Stack.scala b/src/library/scala/collection/immutable/Stack.scala index 329f12190f..adbe34ed09 100644 --- a/src/library/scala/collection/immutable/Stack.scala +++ b/src/library/scala/collection/immutable/Stack.scala @@ -20,7 +20,7 @@ import mutable.{ ArrayBuffer, Builder } */ object Stack extends SeqFactory[Stack] { /** $genericCanBuildFromInfo */ - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Stack[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Stack[A]] = new ArrayBuffer[A] mapResult (buf => new Stack(buf.toList)) @deprecated("Use Stack.empty instead", "2.8.0") diff --git a/src/library/scala/collection/immutable/Traversable.scala b/src/library/scala/collection/immutable/Traversable.scala index 80839db31c..7830b38d69 100644 --- a/src/library/scala/collection/immutable/Traversable.scala +++ b/src/library/scala/collection/immutable/Traversable.scala @@ -33,6 +33,6 @@ trait Traversable[+A] extends scala.collection.Traversable[A] * @define Coll immutable.Traversable */ object Traversable extends TraversableFactory[Traversable] { - implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = new GenericCanBuildFrom[A] + implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Traversable[A]] = ReusableCBF.asInstanceOf[GenericCanBuildFrom[A]] def newBuilder[A]: Builder[A, Traversable[A]] = new mutable.ListBuffer } diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala index ab44585902..5adbcbb524 100644 --- a/src/library/scala/collection/immutable/Vector.scala +++ b/src/library/scala/collection/immutable/Vector.scala @@ -6,30 +6,23 @@ ** |/ ** \* */ - package scala.collection package immutable import scala.annotation.unchecked.uncheckedVariance import compat.Platform - import scala.collection.generic._ import scala.collection.mutable.Builder import scala.collection.parallel.immutable.ParVector - object Vector extends SeqFactory[Vector] { - private[immutable] val BF = new GenericCanBuildFrom[Nothing] { - override def apply() = newBuilder[Nothing] - } @inline implicit def canBuildFrom[A]: CanBuildFrom[Coll, A, Vector[A]] = - BF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]] + ReusableCBF.asInstanceOf[CanBuildFrom[Coll, A, Vector[A]]] def newBuilder[A]: Builder[A, Vector[A]] = new VectorBuilder[A] private[immutable] val NIL = new Vector[Nothing](0, 0, 0) @inline override def empty[A]: Vector[A] = NIL } - // in principle, most members should be private. however, access privileges must // be carefully chosen to not prevent method inlining |