public Pair<ProtocolProducer, DRes<InputT>> createNextStep( InputT input, BuilderFactory<BuilderT> factory, BuildStep<InputT, BuilderT, ?> next) { LoopProtocolProducer<BuilderT, InputT> loopProtocolProducer = new LoopProtocolProducer<>(factory, input, predicate, function, next); return new Pair<>(loopProtocolProducer, loopProtocolProducer); }
@Override public boolean hasNextProtocols() { next(); return !isDone; }
private void next() { while (!isDone && !currentProducer.hasNextProtocols()) { updateToNextProducer(out()); } }
LoopProtocolProducer( BuilderFactory<BuilderT> factory, InputT input, Predicate<InputT> predicate, FrescoLambda<InputT, BuilderT, InputT> function, BuildStep<InputT, BuilderT, ?> next) { this.factory = factory; this.predicate = predicate; this.function = function; this.next = next; isDone = false; doneWithOwn = false; currentProducer = null; currentResult = () -> input; updateToNextProducer(input); }