package au.csiro.snorocket.core.util; import java.util.Iterator; public final class DuoMonotonicCollection<T> implements IMonotonicCollection<T> { /** * Serialisation version. */ private static final long serialVersionUID = 1L; final private IMonotonicCollection<T> base; final private IMonotonicCollection<T> overlay; public DuoMonotonicCollection(IMonotonicCollection<T> base, IMonotonicCollection<T> overlay) { this.base = base; this.overlay = overlay; } public IMonotonicCollection<T> getOverlay() { return overlay; } public void add(T element) { overlay.add(element); } public int size() { return base.size() + overlay.size(); } public Iterator<T> iterator() { return new Iterator<T>() { final Iterator<T> baseItr = base.iterator(); final Iterator<T> overlayItr = overlay.iterator(); public boolean hasNext() { return baseItr.hasNext() || overlayItr.hasNext(); } public T next() { return baseItr.hasNext() ? baseItr.next() : overlayItr.next(); } public void remove() { throw new UnsupportedOperationException(); } }; } }