// Increments the position reference counts on nodes immediately // preceding and following a delete operation. // // Whenever we delete a span of content, we have to worry about any // positions still referencing the deleted content. They have enough // information to find their way back to the surrounding nodes, but // we need to increment the ref count on those nodes now so that they'll // still be around when the positions need them. // // Because incrementing a ref count on a text node edge may involve // splitting the text node, this method takes refs to nodes and will // update the refs if a node is split. // // Called by DeleteContentFromSiblingTree and ExtractElementInternal. private void AdjustRefCountsForContentDelete(ref TextTreeNode previousNode, ElementEdge previousEdge, ref TextTreeNode nextNode, ElementEdge nextEdge, TextTreeNode middleSubTree) { bool leftEdgeReferenceCount; bool rightEdgeReferenceCount; leftEdgeReferenceCount = false; rightEdgeReferenceCount = false; // Get the count of all positions referencing text node edges across the deleted content. GetReferenceCounts((TextTreeNode)middleSubTree.GetMinSibling(), ref leftEdgeReferenceCount, ref rightEdgeReferenceCount); previousNode = previousNode.IncrementReferenceCount(previousEdge, rightEdgeReferenceCount); nextNode = nextNode.IncrementReferenceCount(nextEdge, leftEdgeReferenceCount); }