summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/TraversableViewLike.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-12-23 17:57:36 +0000
committerPaul Phillips <paulp@improving.org>2009-12-23 17:57:36 +0000
commit17f712ec18b4f6f4fac43f146b66c749ed68caa7 (patch)
tree358c7d6b3091fdc24623b96a5334b31d50ac87cc /src/library/scala/collection/TraversableViewLike.scala
parentb41e97987f1d6b7f0ccd6dc2a3fb09543f1daab0 (diff)
downloadscala-17f712ec18b4f6f4fac43f146b66c749ed68caa7.tar.gz
scala-17f712ec18b4f6f4fac43f146b66c749ed68caa7.tar.bz2
scala-17f712ec18b4f6f4fac43f146b66c749ed68caa7.zip
Created team of private[collection] abstract cl...
Created team of private[collection] abstract classes and traits in scala.collection.views. Factored boilerplate and base Transformed traits out of *ViewLike classes. Executive summary and motivation: 4812029 Dec 23 09:47 scala-library.jar // before 4604150 Dec 23 09:24 scala-library.jar // after Direct size savings of 4.5%. Review by odersky.
Diffstat (limited to 'src/library/scala/collection/TraversableViewLike.scala')
-rw-r--r--src/library/scala/collection/TraversableViewLike.scala23
1 files changed, 7 insertions, 16 deletions
diff --git a/src/library/scala/collection/TraversableViewLike.scala b/src/library/scala/collection/TraversableViewLike.scala
index 84c33296db..7f4d0ebd71 100644
--- a/src/library/scala/collection/TraversableViewLike.scala
+++ b/src/library/scala/collection/TraversableViewLike.scala
@@ -33,7 +33,9 @@ import TraversableView.NoBuilder
trait TraversableViewLike[+A,
+Coll,
+This <: TraversableView[A, Coll] with TraversableViewLike[A, Coll, This]]
- extends Traversable[A] with TraversableLike[A, This] {
+ extends Traversable[A]
+ with TraversableLike[A, This]
+ with views.TraversableTransformations[A, Coll, This] {
self =>
override protected[this] def newBuilder: Builder[A, This] =
@@ -41,16 +43,16 @@ self =>
protected def underlying: Coll
+ trait Transformed[+B] extends views.TraversableLike[B, Coll] {
+ lazy val underlying = self.underlying
+ }
+
def force[B >: A, That](implicit bf: CanBuildFrom[Coll, B, That]) = {
val b = bf(underlying)
b ++= this
b.result()
}
- trait Transformed[+B] extends TraversableView[B, Coll] {
- lazy val underlying = self.underlying
- }
-
/** pre: from >= 0
*/
trait Sliced extends Transformed[A] {
@@ -131,17 +133,6 @@ self =>
override def stringPrefix = self.stringPrefix+"D"
}
- /** Boilerplate method, to override in each subclass
- * This method could be eliminated if Scala had virtual classes
- */
- protected def newAppended[B >: A](that: Traversable[B]): Transformed[B] = new Appended[B] { val rest = that }
- protected def newMapped[B](f: A => B): Transformed[B] = new Mapped[B] { val mapping = f }
- protected def newFlatMapped[B](f: A => Traversable[B]): Transformed[B] = new FlatMapped[B] { val mapping = f }
- protected def newFiltered(p: A => Boolean): Transformed[A] = new Filtered { val pred = p }
- protected def newSliced(_from: Int, _until: Int): Transformed[A] = new Sliced { val from = _from; val until = _until }
- protected def newDroppedWhile(p: A => Boolean): Transformed[A] = new DroppedWhile { val pred = p }
- protected def newTakenWhile(p: A => Boolean): Transformed[A] = new TakenWhile { val pred = p }
-
override def ++[B >: A, That](that: Traversable[B])(implicit bf: CanBuildFrom[This, B, That]): That = {
newAppended(that).asInstanceOf[That]
// was: if (bf.isInstanceOf[ByPassCanBuildFrom]) newAppended(that).asInstanceOf[That]