internal static void HandleNodeReplaced <K, T>(this IAListTreeObserver <K, T> self, AListNode <K, T> oldNode, AListNode <K, T> newLeft, AListNode <K, T> newRight) { if (newRight == null) { // cloned, not split Debug.Assert(oldNode.IsFrozen && !newLeft.IsFrozen); Debug.Assert(oldNode.LocalCount == newLeft.LocalCount); } self.RemoveAll(oldNode); self.AddAll(newLeft); if (newRight != null) { self.AddAll(newRight); } }
private static void AddAllRecursively <K, T>(IAListTreeObserver <K, T> observer, bool childrenFirst, AListNode <K, T> node) { if (!childrenFirst) { observer.AddAll(node); } var inner = node as AListInnerBase <K, T>; if (inner != null) { for (int i = 0; i < inner.LocalCount; i++) { AddAllRecursively(observer, childrenFirst, inner.Child(i)); } } if (childrenFirst) { observer.AddAll(node); } }