package org.osgl.util; import org.osgl.$; import java.util.EnumSet; import java.util.Iterator; /** * A simple readonly {@link C.Traversable} implementation based on an {@link java.util.Iterator} */ class IteratorTrav<T> extends TraversableBase<T> { private Iterator<T> itr_; private EnumSet<C.Feature> features; IteratorTrav(Iterator<T> iterator) { E.NPE(iterator); itr_ = iterator; } @Override protected EnumSet<C.Feature> initFeatures() { return EnumSet.of(C.Feature.READONLY); } @Override public Iterator<T> iterator() { return itr_; } @Override public int size() throws UnsupportedOperationException { throw new UnsupportedOperationException(); } @Override public <R> C.Traversable<R> map($.Function<? super T, ? extends R> mapper) { return new IteratorTrav<R>(new MappedIterator<T, R>(itr_, mapper)); } @Override public <R> C.Traversable<R> flatMap($.Function<? super T, ? extends Iterable<? extends R>> mapper ) { return new IteratorTrav<R>(new FlatMappedIterator<T, R>(itr_, mapper)); } @Override public C.Traversable<T> filter($.Function<? super T, Boolean> predicate) { return new IteratorTrav<T>(new FilteredIterator<T>(itr_, predicate)); } }