package com.intellij.concurrency; import java.util.Iterator; /** * Author: dmitrylomov */ public abstract class Iterate<T> extends DoWhile { private final Iterator<T> myIterator; private boolean myIsDone; public Iterate(Iterable<T> iterable) { myIterator = iterable.iterator(); myIsDone = false; } @Override protected final AsyncFuture<Boolean> body() { if (!myIterator.hasNext()) { myIsDone = true; return AsyncFutureFactory.wrap(true); } return process(myIterator.next()); } protected abstract AsyncFuture<Boolean> process(T t); @Override protected boolean condition() { return !myIsDone; } }