summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/SeqViewLike.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/SeqViewLike.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/SeqViewLike.scala')
-rw-r--r--src/library/scala/collection/SeqViewLike.scala26
1 files changed, 6 insertions, 20 deletions
diff --git a/src/library/scala/collection/SeqViewLike.scala b/src/library/scala/collection/SeqViewLike.scala
index 1a8cd20013..6f677616e7 100644
--- a/src/library/scala/collection/SeqViewLike.scala
+++ b/src/library/scala/collection/SeqViewLike.scala
@@ -23,13 +23,14 @@ 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]
+ extends Seq[A]
+ with SeqLike[A, This]
+ with IterableView[A, Coll]
+ with IterableViewLike[A, Coll, This]
+ with views.SeqTransformations[A, Coll, This]
{ self =>
- trait Transformed[+B] extends SeqView[B, Coll] with super.Transformed[B] {
- override def length: Int
- override def apply(idx: Int): B
- }
+ trait Transformed[+B] extends views.SeqLike[B, Coll] with super.Transformed[B]
trait Sliced extends Transformed[A] with super.Sliced {
override def length = ((until min self.length) - from) max 0
@@ -143,21 +144,6 @@ 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 = {