package org.osgl.util;
import java.io.Serializable;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Iterator;
class DelegatingRSeq<T> extends ReversibleSeqBase<T> implements Serializable {
private C.ReversibleSequence<T> data;
DelegatingRSeq(C.ReversibleSequence<T> rseq) {
data = rseq;
}
C.ReversibleSequence<T> data() {return data;}
public int size() throws UnsupportedOperationException {
if (data instanceof Collection) {
return ((Collection<?>)data).size();
}
throw new UnsupportedOperationException();
}
@Override
protected EnumSet<C.Feature> initFeatures() {
EnumSet<C.Feature> fs = data().features();
fs.add(C.Feature.READONLY);
return fs;
}
@Override
public Iterator<T> iterator() {
return DelegatingIterator.of(data.iterator(), is(C.Feature.READONLY));
}
@Override
public Iterator<T> reverseIterator() {
return data.reverseIterator();
}
@SuppressWarnings("unchecked")
public static <T> C.ReversibleSequence<T> of(C.ReversibleSequence<T> rseq) {
return new DelegatingRSeq<T>(rseq);
}
}