package org.osgl.util; import java.util.Collection; import java.util.Iterator; class IterableSeq<T> extends SequenceBase<T> { private Iterable<? extends T> data; IterableSeq(Iterable<? extends T> iterable) { data = iterable; } @Override public int size() throws UnsupportedOperationException { if (data instanceof Collection) { return ((Collection<?>)data).size(); } throw new UnsupportedOperationException(); } @Override public Iterator<T> iterator() { return DelegatingIterator.of(data.iterator(), is(C.Feature.READONLY)); } @SuppressWarnings("unchecked") public static <T> C.Sequence<T> of(Iterable<? extends T> iterable) { if (iterable instanceof C.Sequence) { return (C.Sequence<T>)iterable; } return new IterableSeq<T>(iterable); } }