diff options
author | Paul Phillips <paulp@improving.org> | 2010-01-13 22:50:40 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-01-13 22:50:40 +0000 |
commit | 1e828fdbf04402dc53e897f6a7201bad00388b70 (patch) | |
tree | 9f40e587fa01bdfa59fbca89adbb31e58cce45df /src/library/scala/collection/TraversableViewLike.scala | |
parent | 541dd58f4d8fec8fc2b385b2c288721e5e258915 (diff) | |
download | scala-1e828fdbf04402dc53e897f6a7201bad00388b70.tar.gz scala-1e828fdbf04402dc53e897f6a7201bad00388b70.tar.bz2 scala-1e828fdbf04402dc53e897f6a7201bad00388b70.zip |
Reverts r20311 since I'm not seeing what's goin...
Reverts r20311 since I'm not seeing what's going on in #2876 and the
optimization can wait.
Diffstat (limited to 'src/library/scala/collection/TraversableViewLike.scala')
-rw-r--r-- | src/library/scala/collection/TraversableViewLike.scala | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/library/scala/collection/TraversableViewLike.scala b/src/library/scala/collection/TraversableViewLike.scala index 7f4d0ebd71..84c33296db 100644 --- a/src/library/scala/collection/TraversableViewLike.scala +++ b/src/library/scala/collection/TraversableViewLike.scala @@ -33,9 +33,7 @@ import TraversableView.NoBuilder trait TraversableViewLike[+A, +Coll, +This <: TraversableView[A, Coll] with TraversableViewLike[A, Coll, This]] - extends Traversable[A] - with TraversableLike[A, This] - with views.TraversableTransformations[A, Coll, This] { + extends Traversable[A] with TraversableLike[A, This] { self => override protected[this] def newBuilder: Builder[A, This] = @@ -43,16 +41,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] { @@ -133,6 +131,17 @@ 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] |