summaryrefslogtreecommitdiff
path: root/src/library/scalax/collection/generic/Subtractable.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scalax/collection/generic/Subtractable.scala')
-rwxr-xr-xsrc/library/scalax/collection/generic/Subtractable.scala64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/library/scalax/collection/generic/Subtractable.scala b/src/library/scalax/collection/generic/Subtractable.scala
new file mode 100755
index 0000000000..93fe2f8190
--- /dev/null
+++ b/src/library/scalax/collection/generic/Subtractable.scala
@@ -0,0 +1,64 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id: Iterable.scala 15188 2008-05-24 15:01:02Z stepancheg $
+
+package scalax.collection.generic
+
+/** This class represents collections that can be reduced using a -= operator.
+ *
+ * @autor Martin Odersky
+ * @owner Martin Odersky
+ * @version 2.8
+ */
+trait Subtractable[+C <: Subtractable[C, A], A] {
+
+ protected def thisCC: C
+
+ /** Removes a single element from this collection and returns
+ * either the collection itself (if it is mutable), or a new collection
+ * with the removed element.
+ *
+ * @param elem the element to remove.
+ */
+ def -(elem: A): C
+
+ /** Removes two or more elements from this collection and returns
+ * either the collection itself (if it is mutable), or a new collection
+ * with the removed elements.
+ *
+ * @param elem1 the first element to remove.
+ * @param elem2 the second element to remove.
+ * @param elems the remaining elements to remove.
+ */
+ def -(elem1: A, elem2: A, elems: A*): C =
+ thisCC - elem1 - elem2 -- elems.asInstanceOf[Iterable[A]] // !@!
+
+ /** Removes a number of elements provided by an iterable object
+ * via its <code>elements</code> method and returns
+ * either the collection itself (if it is mutable), or a new collection
+ * with the removed elements.
+ *
+ * @param iter the iterable object.
+ */
+ def --(iter: Iterable[A]): C = (thisCC /: iter) (_ - _)
+
+ /** Removes a number of elements provided by an iterator
+ * via its <code>elements</code> method and returns
+ * either the collection itself (if it is mutable), or a new collection
+ * with the removed elements.
+ *
+ * @param iter the iterator
+ */
+ def --(iter: Iterator[A]): C = (thisCC /: iter) (_ - _)
+
+}
+
+
+
+