blob: 0df2f74f4ba7dec23576b0f8947f7799eee7d481 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
// $Id$
package scala.collection.jcl;
object Collection {
val DEFAULT_FILTER : Any => Boolean = x => true;
trait Projection[A] extends Collection[A] with MutableIterable.Projection[A] {
override def projection = this
}
}
/** Analogous to a Java collection.
*
* @author Sean McDirmid
*/
trait Collection[A] extends MutableIterable[A] {
/** Type-safe version of containsAll.
**
** @author Sean McDirmid
**/
def hasAll(i: Iterable[A]): Boolean = i.forall(elements.has);
/** Adds "a" to the collection, return true if "a" is actually added. */
def add(a: A): Boolean;
/** Adds all elements in "i" to the collection, return true if any elements are added. */
def addAll(i: Iterable[A]): Boolean = {
var changed = false;
i.foreach(t => changed = add(t) || changed);
changed;
}
/** Operator shortcut for addAll. */
def ++(that: Iterable[A]): this.type = {
addAll(that); this;
}
/** removes "a" from the collection. */
def -=(a : A) : Unit = remove(a);
/** adds "a" from the collection. */
def +=(t : A) : Unit = add(t);
/** adds "a" from the collection. Useful for chaining. */
def +(t : A) : this.type = { add(t); this; }
/** Transforms each element of the collection in-place according to
* <code>f</code>.
*
* @param f
* @return <code>true</code> if the collection is actually updated.
*/
def transform(f: A => A): Boolean
override def projection : Collection.Projection[A] = new Collection.Projection[A] {
override def elements = Collection.this.elements
override def size = Collection.this.size
override def add(a: A): Boolean = Collection.this.add(a)
override def transform(f : A => A) = Collection.this.transform(f);
}
}
|