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);
     }
 }