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/SeqViewLike.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/SeqViewLike.scala')
-rw-r--r-- | src/library/scala/collection/SeqViewLike.scala | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/src/library/scala/collection/SeqViewLike.scala b/src/library/scala/collection/SeqViewLike.scala index 6f677616e7..1a8cd20013 100644 --- a/src/library/scala/collection/SeqViewLike.scala +++ b/src/library/scala/collection/SeqViewLike.scala @@ -23,14 +23,13 @@ import TraversableView.NoBuilder trait SeqViewLike[+A, +Coll, +This <: SeqView[A, Coll] with SeqViewLike[A, Coll, This]] - extends Seq[A] - with SeqLike[A, This] - with IterableView[A, Coll] - with IterableViewLike[A, Coll, This] - with views.SeqTransformations[A, Coll, This] + extends Seq[A] with SeqLike[A, This] with IterableView[A, Coll] with IterableViewLike[A, Coll, This] { self => - trait Transformed[+B] extends views.SeqLike[B, Coll] with super.Transformed[B] + trait Transformed[+B] extends SeqView[B, Coll] with super.Transformed[B] { + override def length: Int + override def apply(idx: Int): B + } trait Sliced extends Transformed[A] with super.Sliced { override def length = ((until min self.length) - from) max 0 @@ -144,6 +143,21 @@ trait SeqViewLike[+A, override def stringPrefix = self.stringPrefix+"P" } + /** Boilerplate method, to override in each subclass + * This method could be eliminated if Scala had virtual classes + */ + protected override def newAppended[B >: A](that: Traversable[B]): Transformed[B] = new Appended[B] { val rest = that } + protected override def newMapped[B](f: A => B): Transformed[B] = new Mapped[B] { val mapping = f } + protected override def newFlatMapped[B](f: A => Traversable[B]): Transformed[B] = new FlatMapped[B] { val mapping = f } + protected override def newFiltered(p: A => Boolean): Transformed[A] = new Filtered { val pred = p } + protected override def newSliced(_from: Int, _until: Int): Transformed[A] = new Sliced { val from = _from; val until = _until } + protected override def newDroppedWhile(p: A => Boolean): Transformed[A] = new DroppedWhile { val pred = p } + protected override def newTakenWhile(p: A => Boolean): Transformed[A] = new TakenWhile { val pred = p } + protected override def newZipped[B](that: Iterable[B]): Transformed[(A, B)] = new Zipped[B] { val other = that } + protected override def newZippedAll[A1 >: A, B](that: Iterable[B], _thisElem: A1, _thatElem: B): Transformed[(A1, B)] = new ZippedAll[A1, B] { val other = that; val thisElem = _thisElem; val thatElem = _thatElem } + protected def newReversed: Transformed[A] = new Reversed { } + protected def newPatched[B >: A](_from: Int, _patch: Seq[B], _replaced: Int): Transformed[B] = new Patched[B] { val from = _from; val patch = _patch; val replaced = _replaced } + override def reverse: This = newReversed.asInstanceOf[This] override def patch[B >: A, That](from: Int, patch: Seq[B], replaced: Int)(implicit bf: CanBuildFrom[This, B, That]): That = { |