processNodes method
Implementation
Map<int, ProcessedNode> processNodes(AnimationState animation) {
final processedNodes = <int, ProcessedNode>{};
final inDegree = <int, int>{};
final adjacencyMap = <int, Set<int>>{};
for (final node in nodes.values) {
final index = node.nodeIndex;
final deps = node.dependencies;
inDegree[index] = deps.length;
for (final dep in deps) {
(adjacencyMap[dep] ??= {}).add(index);
}
}
final queue = Queue<int>.from(
[
for (final node in nodes.values)
if (inDegree[node.nodeIndex] == 0) node.nodeIndex,
],
);
while (queue.isNotEmpty) {
final index = queue.removeFirst();
final node = nodes[index]!;
node.processNode(processedNodes, animation);
final adjacency = adjacencyMap[index] ?? {};
for (final dependency in adjacency) {
inDegree[dependency] = inDegree[dependency]! - 1;
if (inDegree[dependency] == 0) {
queue.add(dependency);
}
}
}
if (processedNodes.length != nodes.length) {
throw StateError('Failed to process all nodes');
}
return processedNodes;
}