/*
* Created on Mar 8, 2006
*/
package org.seqcode.gsebricks.verbs;
import java.util.*;
/**
* @author tdanford
*/
public class MultiIterator<X> implements Iterator<X> {
private LinkedList<Iterator<? extends X>> itrs;
public MultiIterator(Collection<Iterator<? extends X>> c) {
itrs = new LinkedList<Iterator<? extends X>>(c);
clearEmpty();
}
public MultiIterator(Iterator<? extends X> first, Iterator<? extends X> second) {
itrs = new LinkedList<Iterator<? extends X>>();
itrs.addLast(first);
itrs.addLast(second);
clearEmpty();
}
/* (non-Javadoc)
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return !itrs.isEmpty() && itrs.getFirst().hasNext();
}
private void clearEmpty() {
while(!itrs.isEmpty() && !itrs.getFirst().hasNext()) {
itrs.removeFirst();
}
}
/* (non-Javadoc)
* @see java.util.Iterator#next()
*/
public X next() {
Iterator<? extends X> nextItr = itrs.getFirst();
X val = nextItr.next();
clearEmpty();
return val;
}
/* (non-Javadoc)
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
}