populate<R> method
R?
populate<R>(
- Iterable<
T> entries, { - GraphWalkNodeProvider<
T> ? nodeProvider, - GraphWalkOutputsProvider<
T> ? inputsProvider, - GraphWalkOutputsProvider<
T> ? outputsProvider, - GraphWalkNodeProcessor<
T, R> ? process, - int maxExpansion = 3,
- bool bfs = false,
Populates this graph with entries
.
inputsProvider
: provides the inputs of an entry.outputsProvider
: provides the outputs of an entry.
Implementation
R? populate<R>(
Iterable<T> entries, {
GraphWalkNodeProvider<T>? nodeProvider,
GraphWalkOutputsProvider<T>? inputsProvider,
GraphWalkOutputsProvider<T>? outputsProvider,
GraphWalkNodeProcessor<T, R>? process,
int maxExpansion = 3,
bool bfs = false,
}) {
nodeProvider ??= (s, e) => this.node(e);
inputsProvider ??= (s, e) => [];
outputsProvider ??= (s, e) => [];
var graphWalker = GraphWalker<T>(maxExpansion: maxExpansion, bfs: bfs);
return graphWalker.walk<R>(
entries,
nodeProvider: nodeProvider,
outputsProvider: outputsProvider,
process: (step) {
var node = step.node;
var nodeValue = node.value;
var outputs = outputsProvider!(step, nodeValue) ?? [];
for (var child in outputs) {
node.addOutput(child);
}
var inputs = inputsProvider!(step, nodeValue) ?? [];
for (var dep in inputs) {
node.addInput(dep);
}
if (process == null) {
return null;
}
var ret = process(step);
return ret;
},
);
}