diff options
author | Martin Odersky <odersky@gmail.com> | 2010-03-19 17:35:58 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2010-03-19 17:35:58 +0000 |
commit | c059e09cc7fee862e605c4d4d054447bc460aa2a (patch) | |
tree | 3f74ebdfc248e7fa2f7a43151ff0c771a9699909 /src/library/scala/collection/IterableViewLike.scala | |
parent | 05c22ec2eed257c7b5e93aa4830a7666831fff48 (diff) | |
download | scala-c059e09cc7fee862e605c4d4d054447bc460aa2a.tar.gz scala-c059e09cc7fee862e605c4d4d054447bc460aa2a.tar.bz2 scala-c059e09cc7fee862e605c4d4d054447bc460aa2a.zip |
Spring cleaning of collection libraries.
If people think some operations can be more lazy, please provide
patches/do changes. Also brought proxies and forwarders into line.
Diffstat (limited to 'src/library/scala/collection/IterableViewLike.scala')
-rw-r--r-- | src/library/scala/collection/IterableViewLike.scala | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/library/scala/collection/IterableViewLike.scala b/src/library/scala/collection/IterableViewLike.scala index 27323294c4..09f084d92c 100644 --- a/src/library/scala/collection/IterableViewLike.scala +++ b/src/library/scala/collection/IterableViewLike.scala @@ -29,6 +29,10 @@ extends Iterable[A] with IterableLike[A, This] with TraversableView[A, Coll] wit trait Transformed[+B] extends IterableView[B, Coll] with super.Transformed[B] + trait Forced[B] extends Transformed[B] with super.Forced[B] { + override def iterator = forced.iterator + } + trait Sliced extends Transformed[A] with super.Sliced { override def iterator = self.iterator slice (from, until) } @@ -96,6 +100,7 @@ extends Iterable[A] with IterableLike[A, This] with TraversableView[A, Coll] wit /** Boilerplate method, to override in each subclass * This method could be eliminated if Scala had virtual classes */ + protected override def newForced[B](xs: => Seq[B]): Transformed[B] = new Forced[B] { val forced = xs } 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 } @@ -104,5 +109,11 @@ extends Iterable[A] with IterableLike[A, This] with TraversableView[A, Coll] wit 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 } + override def grouped(size: Int): Iterator[This] = + self.iterator.grouped(size).map(xs => newForced(xs).asInstanceOf[This]) + + override def sliding[B >: A](size: Int, step: Int): Iterator[This] = + self.iterator.sliding(size).map(xs => newForced(xs).asInstanceOf[This]) + override def stringPrefix = "IterableView" } |