calculateTreeDiff<T extends ITreeNode> function

List<TreeDiffUpdate> calculateTreeDiff<T extends ITreeNode>(
  1. T oldTree,
  2. T newTree
)

Implementation

List<TreeDiffUpdate> calculateTreeDiff<T extends ITreeNode>(
    T oldTree, T newTree) {
  final updates = <TreeDiffUpdate>[];

  final queue = ListQueue<Tuple2<INode, INode>>();
  queue.add(Tuple2(oldTree, newTree));

  while (queue.isNotEmpty) {
    final nodesToCompare = queue.removeFirst();

    if (nodesToCompare.item1.childrenAsList.isEmpty &&
        nodesToCompare.item2.childrenAsList.isEmpty) continue;

    final localUpdates = TreeDiff(
      oldTree: nodesToCompare.item1 as ITreeNode,
      newTree: nodesToCompare.item2 as ITreeNode,
    );

    updates.addAll(localUpdates.allUpdates);
    queue.addAll(localUpdates.nodesUnchanged);
  }

  return updates;
}