package org.seqcode.gsebricks.verbs;
import java.util.*;
public class DistillerIterator<A,B> implements Iterator<B> {
private Distiller<A,B> filter;
private Iterator<A> input;
private B next;
private boolean finished;
public DistillerIterator(Distiller<A,B> filter, Iterator<A> input) {
this.filter = filter;
this.input = input;
next = null;
finished = false;
getNext();
}
private void getNext() {
while(!finished && next == null && input != null) {
if(input.hasNext()) {
next = filter.execute(input.next());
} else {
next = filter.getCurrent();
finished = true;
}
}
}
public boolean hasNext() {
return next != null;
}
public B next() {
B toreturn = next;
next = null;
getNext();
return toreturn;
}
public void remove() {
throw new UnsupportedOperationException("Can't remove from a DistillerIterator");
}
}