summaryrefslogblamecommitdiff
path: root/sources/scala/ImmutableSet.scala
blob: 7e59d8dbaf7a44a5e121faaa2a6b921bba32ead1 (plain) (tree)













































                                                                          
/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2003, LAMP/EPFL                  **
**  __\ \/ /__/ __ |/ /__/ __ |                                         **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
** $Id$
\*                                                                      */

package scala;


trait ImmutableSet[A, This <: ImmutableSet[A, This]]: This with Set[A] {

    def add(elem: A): This;

    def addAll(elems: A*): This = addSet(elems);

    def addSet(that: Iterable[A]): This = {
        var res = this;
        that.elements.foreach(elem => res = res.add(elem));
        res;
    }

    def remove(elem: A): This;

    def removeAll(elems: A*): This = removeSet(elems);

    def removeSet(that: Iterable[A]): This = {
        var res = this;
        that.elements.foreach(elem => res = res.remove(elem));
        res;
    }

    def intersect(that: Set[A]): This = filter(that.contains);

    def clear: This;

    def filter(p: A => Boolean): This = {
        var res = this;
        toList foreach {
            elem => if (p(elem)) { res = res.remove(elem); }
        }
        res;
    }
}