summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/TraversableLike.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-10-16 15:38:40 +0000
committerMartin Odersky <odersky@gmail.com>2009-10-16 15:38:40 +0000
commit136c1cce62ab8a35d7f0a515d7456fe4764611c3 (patch)
tree8dd0f923e82158ea72f5ccd997bd96dba8185c7c /src/library/scala/collection/TraversableLike.scala
parent8ce658f6653bc6fedb7c7f43f9e307fe55847297 (diff)
downloadscala-136c1cce62ab8a35d7f0a515d7456fe4764611c3.tar.gz
scala-136c1cce62ab8a35d7f0a515d7456fe4764611c3.tar.bz2
scala-136c1cce62ab8a35d7f0a515d7456fe4764611c3.zip
moved Range and GenericRange to collection.immu...
moved Range and GenericRange to collection.immutable, with alias for Range in scala package object; made Range strict. moved from filter to withFilter in translation for for expressions.
Diffstat (limited to 'src/library/scala/collection/TraversableLike.scala')
-rw-r--r--src/library/scala/collection/TraversableLike.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala
index 9f4bdbac7f..2716956cb9 100644
--- a/src/library/scala/collection/TraversableLike.scala
+++ b/src/library/scala/collection/TraversableLike.scala
@@ -826,4 +826,30 @@ self =>
* @note view(from, to) is equivalent to view.slice(from, to)
*/
def view(from: Int, until: Int): TraversableView[A, Repr] = view.slice(from, until)
+
+ class WithFilter(p: A => Boolean) {
+
+ def map[B, That](f: A => B)(implicit bf: BuilderFactory[B, That, Repr]): That = {
+ val b = bf(repr)
+ for (x <- self)
+ if (p(x)) b += f(x)
+ b.result
+ }
+
+ def flatMap[B, That](f: A => Traversable[B])(implicit bf: BuilderFactory[B, That, Repr]): That = {
+ val b = bf(repr)
+ for (x <- self)
+ if (p(x)) b ++= f(x)
+ b.result
+ }
+
+ def foreach[U](f: A => U): Unit =
+ for (x <- self)
+ if (p(x)) f(x)
+
+ def withFilter(q: A => Boolean): WithFilter =
+ new WithFilter(x => p(x) && q(x))
+ }
+
+ def withFilter(p: A => Boolean): WithFilter = new WithFilter(p)
}