ChunkIterator.java
package handist.collections;
import java.util.Iterator;
public class ChunkIterator<T> implements Iterator<T> {
private final Object[] a;
public final LongRange range;
private int i; // offset inside the chunk
private final int limit;
public ChunkIterator() {
this.range = new LongRange(0);
this.a = null;
this.limit = 0;
this.i = -1;
}
public ChunkIterator(int offset, LongRange range, Object[] a) {
/*
* range0 = chunk.getRange().intersection(range0); if(range0 == null) { throw
* new IndexOutOfBoundsException(); }
*/
this.range = range;
this.a = a;
this.limit = offset + (int) range.size();
this.i = offset - 1;
}
public ChunkIterator(LongRange range, Object[] a) {
this.range = range;
this.a = a;
this.limit = (int) range.size();
this.i = -1;
}
@Override
public boolean hasNext() {
return i + 1 < limit;
}
@Override
@SuppressWarnings("unchecked")
public T next() {
if (!hasNext()) {
throw new IndexOutOfBoundsException();
}
return (T) a[++i];
}
}