diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-06-03 08:55:14 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-06-03 08:55:14 +0000 |
commit | 4e1907afb6ff870f43e59dceb072fc64d7438f08 (patch) | |
tree | b43efd0c8400d8df22455bb79d42e6c298c001fb | |
parent | 60354bdda2978ecbadbf29db0ec0532b0cc6c133 (diff) | |
download | scala-4e1907afb6ff870f43e59dceb072fc64d7438f08.tar.gz scala-4e1907afb6ff870f43e59dceb072fc64d7438f08.tar.bz2 scala-4e1907afb6ff870f43e59dceb072fc64d7438f08.zip |
Forgot to add stream view classes for #3511.
-rw-r--r-- | src/library/scala/collection/immutable/StreamView.scala | 12 | ||||
-rw-r--r-- | src/library/scala/collection/immutable/StreamViewLike.scala | 76 |
2 files changed, 88 insertions, 0 deletions
diff --git a/src/library/scala/collection/immutable/StreamView.scala b/src/library/scala/collection/immutable/StreamView.scala new file mode 100644 index 0000000000..9a7da3be89 --- /dev/null +++ b/src/library/scala/collection/immutable/StreamView.scala @@ -0,0 +1,12 @@ +package scala.collection +package immutable + + + +import scala.collection.generic.CanBuildFrom + + + + + +trait StreamView[+A, +Coll] extends StreamViewLike[A, Coll, StreamView[A, Coll]] diff --git a/src/library/scala/collection/immutable/StreamViewLike.scala b/src/library/scala/collection/immutable/StreamViewLike.scala new file mode 100644 index 0000000000..0b76559a0b --- /dev/null +++ b/src/library/scala/collection/immutable/StreamViewLike.scala @@ -0,0 +1,76 @@ +package scala.collection +package immutable + + + +import scala.collection.generic.CanBuildFrom + + + + + +trait StreamViewLike[+A, + +Coll, + +This <: StreamView[A, Coll] with StreamViewLike[A, Coll, This]] +extends SeqView[A, Coll] + with SeqViewLike[A, Coll, This] +{ self => + + override def force[B >: A, That](implicit bf: CanBuildFrom[Coll, B, That]) = { + this.iterator.toStream.asInstanceOf[That] + } + + trait Transformed[+B] extends StreamView[B, Coll] with super.Transformed[B] + + trait Forced[B] extends Transformed[B] with super.Forced[B] + + trait Sliced extends Transformed[A] with super.Sliced + + trait Mapped[B] extends Transformed[B] with super.Mapped[B] + + trait FlatMapped[B] extends Transformed[B] with super.FlatMapped[B] + + trait Appended[B >: A] extends Transformed[B] with super.Appended[B] + + trait Filtered extends Transformed[A] with super.Filtered + + trait TakenWhile extends Transformed[A] with super.TakenWhile + + trait DroppedWhile extends Transformed[A] with super.DroppedWhile + + trait Zipped[B] extends Transformed[(A, B)] with super.Zipped[B] + + trait ZippedAll[A1 >: A, B] extends Transformed[(A1, B)] with super.ZippedAll[A1, B] + + trait Reversed extends Transformed[A] with super.Reversed + + trait Patched[B >: A] extends Transformed[B] with super.Patched[B] + + trait Prepended[B >: A] extends Transformed[B] with super.Prepended[B] + + /** boilerplate */ + protected override def newForced[B](xs: => collection.Seq[B]): Transformed[B] = new Forced[B] { val forced = xs } + protected override def newAppended[B >: A](that: collection.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 => collection.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: collection.Iterable[B]): Transformed[(A, B)] = new Zipped[B] { val other = that } + protected override def newZippedAll[A1 >: A, B](that: collection.Iterable[B], _thisElem: A1, _thatElem: B): Transformed[(A1, B)] = { + new ZippedAll[A1, B] { val other = that; val thisElem = _thisElem; val thatElem = _thatElem } + } + protected override def newReversed: Transformed[A] = new Reversed { } + protected override def newPatched[B >: A](_from: Int, _patch: collection.Seq[B], _replaced: Int): Transformed[B] = { + new Patched[B] { val from = _from; val patch = _patch; val replaced = _replaced } + } + protected override def newPrepended[B >: A](elem: B): Transformed[B] = new Prepended[B] { protected[this] val fst = elem } + +} + + + + + + |