package org.python.core; import java.util.Iterator; import java.util.NoSuchElementException; /** * Exposes a Python iter as a Java Iterator. */ public abstract class WrappedIterIterator<E> implements Iterator<E> { private final PyObject iter; private PyObject next; private boolean checkedForNext; public WrappedIterIterator(PyObject iter) { this.iter = iter; } public boolean hasNext() { if (!checkedForNext) { next = iter.__iternext__(); checkedForNext = true; } return next != null; } /** * Subclasses must implement this to turn the type returned by the iter to the type expected by * Java. */ public abstract E next(); public PyObject getNext() { if (!hasNext()) { throw new NoSuchElementException("End of the line, bub"); } PyObject toReturn = next; checkedForNext = false; next = null; return toReturn; } public void remove() { throw new UnsupportedOperationException("Can't remove from a Python iterator"); } }