summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/TraversableViewLike.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-01-13 22:50:40 +0000
committerPaul Phillips <paulp@improving.org>2010-01-13 22:50:40 +0000
commit1e828fdbf04402dc53e897f6a7201bad00388b70 (patch)
tree9f40e587fa01bdfa59fbca89adbb31e58cce45df /src/library/scala/collection/TraversableViewLike.scala
parent541dd58f4d8fec8fc2b385b2c288721e5e258915 (diff)
downloadscala-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.scala23
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]