/** * Appends a concrete, native protocol to the list of producers - useful for the native protocol * factories that needs to be builders. * * @param nativeProtocol the native protocol to add * @param <T> the result type of the native protocol * @return a computation that resolves to the result of the native protocol once evaluated */ public <T> DRes<T> append(NativeProtocol<T, ?> nativeProtocol) { SingleProtocolProducer<T> producer = new SingleProtocolProducer<>(nativeProtocol); createAndAppend(producer); return producer; }
/** * Creates a new Build step based on this builder but with a nested parallel protocol * producer inserted into the original protocol producer. * * @param f of the protocol producer - will be lazy evaluated */ public <R> BuildStep<Void, BuilderT, R> par(ComputationParallel<R, BuilderT> f) { FrescoLambda<Void, BuilderT, R> innerBuilder = (inner, ignored) -> f.buildComputation(inner); BuildStep<Void, BuilderT, R> builder = new BuildStep<>(new BuildStepSingle<>(innerBuilder, true)); createAndAppend(new LazyProtocolProducerDecorator(() -> builder.createProducer(null, factory))); return builder; } }
/** * Creates a new Build step based on this builder but with a nested sequential protocol * producer inserted into the original protocol producer. * * @param function creation of the protocol producer - will be lazy evaluated */ public <R> BuildStep<Void, BuilderT, R> seq(Computation<R, BuilderT> function) { FrescoLambda<Void, BuilderT, R> innerBuilder = (inner, ignored) -> function.buildComputation(inner); BuildStep<Void, BuilderT, R> builder = new BuildStep<>(new BuildStepSingle<>(innerBuilder, false)); createAndAppend(new LazyProtocolProducerDecorator(() -> builder.createProducer(null, factory))); return builder; }