package dev.tommyjs.futur.joiner; import dev.tommyjs.futur.promise.Promise; import dev.tommyjs.futur.promise.PromiseCompletion; import dev.tommyjs.futur.promise.PromiseFactory; import dev.tommyjs.futur.util.ConcurrentResultArray; import org.jetbrains.annotations.NotNull; import java.util.Iterator; import java.util.List; public class ResultJoiner extends PromiseJoiner, Void, T, List> { private final ConcurrentResultArray results; public ResultJoiner(@NotNull PromiseFactory factory, @NotNull Iterator> promises, int expectedSize) { super(factory); this.results = new ConcurrentResultArray<>(expectedSize); join(promises); } @Override protected Void getChildKey(Promise value) { return null; } @Override protected @NotNull Promise getChildPromise(Promise value) { return value; } @Override protected void onChildComplete(int index, Void key, @NotNull PromiseCompletion res) { results.set(index, res.getResult()); } @Override protected List getResult() { return results.toList(); } }