package mikera.arrayz.impl;
import java.util.Iterator;
import mikera.arrayz.INDArray;
/**
* General purpose iterator for elements of arbitrary arrays.
*
* @author Mike
*/
public class SliceElementIterator implements Iterator<Double> {
private final INDArray source;
private final int maxPos;
private int pos;
private Iterator<Double> inner;
public SliceElementIterator(INDArray source) {
this.pos=0;
this.source=source;
this.maxPos=source.sliceCount();
inner=source.slice(pos).elementIterator();
if (!inner.hasNext()) {
pos=maxPos;
}
}
public SliceElementIterator(INDArray source, int start, int length) {
this.pos=start;
this.source=source;
this.maxPos=start+length;
}
@Override
public boolean hasNext() {
return (pos<maxPos)&&(inner.hasNext());
}
@Override
public Double next() {
Double d=inner.next();
if (!inner.hasNext()) {
pos++;
if (pos<maxPos) inner=source.slice(pos).elementIterator();
}
return d;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Cannot remove from VectorIterator");
}
}