package htsjdk.samtools.util;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
/**
* Provides an adapter to wrap an Iterator with an Iterable, allowing it to be run through a foreach loop. Will only
* allow iterator() to be called a single time - this is intended to be called inline.
*
* @author jgentry@broadinstitute.org
*/
public class IterableAdapter<T> implements Iterable<T> {
private boolean isIteratorCalled = false;
private final Iterator<T> theIterator;
public IterableAdapter(final Iterator<T> theIterator) {
this.theIterator = theIterator;
}
@Override
public Iterator<T> iterator() {
if (isIteratorCalled) {
throw new ConcurrentModificationException("iterator() can only be called once!");
}
isIteratorCalled = true;
return theIterator;
}
}