void () { if (myNext != Do.INIT) return; Object o = Do.INIT; for (Op op = myFirstOp; op != null; op = op == null ? myFirstOp : op.nextOp) { o = op.apply(op.impl == null ? nextImpl() : o); if (myNext == Do.STOP) return; if (myNext == Do.SKIP) { o = myNext = Do.INIT; if (op.impl == null) { // rollback all prepended takeWhile conditions if nextImpl() votes SKIP for (Op op2 = myFirstOp; op2.impl instanceof CountDown; op2 = op2.nextOp) { ((CountDown<?>)op2.impl).cur ++; } } op = null; } } myNext = o; }