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