populateAsync<R> method
Future<R?>
populateAsync<R>(
- Iterable<
T> entries, { - GraphWalkNodeProviderAsync<
T> ? nodeProvider, - GraphWalkOutputsProviderAsync<
T> ? inputsProvider, - GraphWalkOutputsProviderAsync<
T> ? outputsProvider, - GraphWalkNodeProcessorAsync<
T, R> ? process, - int maxExpansion = 3,
- bool bfs = false,
Implementation
Future<R?> populateAsync<R>(
Iterable<T> entries, {
GraphWalkNodeProviderAsync<T>? nodeProvider,
GraphWalkOutputsProviderAsync<T>? inputsProvider,
GraphWalkOutputsProviderAsync<T>? outputsProvider,
GraphWalkNodeProcessorAsync<T, R>? process,
int maxExpansion = 3,
bool bfs = false,
}) async {
nodeProvider ??= (s, e) => this.node(e);
inputsProvider ??= (s, e) => [];
outputsProvider ??= (s, e) => [];
var graphWalker = GraphWalker<T>(maxExpansion: maxExpansion, bfs: bfs);
return graphWalker.walkAsync<R>(
entries,
nodeProvider: nodeProvider,
outputsProvider: outputsProvider,
process: (step) async {
var node = step.node;
var nodeValue = node.value;
var outputs = await outputsProvider!(step, nodeValue) ?? [];
for (var child in outputs) {
node.addOutput(child);
}
var inputs = await inputsProvider!(step, nodeValue) ?? [];
for (var dep in inputs) {
node.addInput(dep);
}
if (process == null) {
return null;
}
var ret = await process(step);
return ret;
},
);
}