package kodkod.engine.fol2sat; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * Implements a data structure that contains sets of values at different nesting levels. * * @author aleks */ @SuppressWarnings("unchecked") public class NestedSet<T> implements Iterable<T> { private final NestedSet<T> parent; private final Set<T> elems; private NestedSet(NestedSet<T> parent) { this(parent, new HashSet<T>()); } private NestedSet(NestedSet<T> parent, Set<T> elems) { this.parent = parent; this.elems = elems; } public NestedSet<T> createNested() { return new NestedSet<T>(this); } public void add(T elem) { this.elems.add(elem); } public void addAll(Collection<? extends T>elems) { this.elems.addAll(elems); } public NestedSet<T> parent() { return parent; } @Override public Iterator<T> iterator() { return elems.iterator(); } @SuppressWarnings("rawtypes") private static final NestedSet EMPTY = new NestedSet(null); public static <T> NestedSet<T> empty() { return (NestedSet<T>) EMPTY; } }