package ch.x42.terye.iterator; import java.util.Collection; import java.util.Iterator; import javax.jcr.RangeIterator; public class RangeIteratorImpl<T> implements RangeIterator { private Iterator<T> iterator; private long size = -1L; private long position = 0L; public RangeIteratorImpl(Iterable<T> iterable) { iterator = iterable.iterator(); if (iterable instanceof Collection) { size = ((Collection<T>) iterable).size(); } } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public Object next() { position++; return iterator.next(); } @Override public void remove() { iterator.remove(); } @Override public long getPosition() { return position; } @Override public long getSize() { return size; } @Override public void skip(long skipNum) { if (skipNum < 0) { throw new IllegalArgumentException("Parameter must be non-negative"); } while (skipNum > 0) { next(); skipNum--; } } }