AvalonStudio.TextEditor.Document.TextAnchorTree.RemoveNode C# (CSharp) Method

RemoveNode() private method

private RemoveNode ( TextAnchorNode removedNode ) : void
removedNode TextAnchorNode
return void
		private void RemoveNode(TextAnchorNode removedNode)
		{
			if (removedNode.left != null && removedNode.right != null)
			{
				// replace removedNode with it's in-order successor

				var leftMost = removedNode.right.LeftMost;
				RemoveNode(leftMost); // remove leftMost from its current location

				// and overwrite the removedNode with it
				ReplaceNode(removedNode, leftMost);
				leftMost.left = removedNode.left;
				if (leftMost.left != null) leftMost.left.parent = leftMost;
				leftMost.right = removedNode.right;
				if (leftMost.right != null) leftMost.right.parent = leftMost;
				leftMost.color = removedNode.color;

				UpdateAugmentedData(leftMost);
				if (leftMost.parent != null) UpdateAugmentedData(leftMost.parent);
				return;
			}

			// now either removedNode.left or removedNode.right is null
			// get the remaining child
			var parentNode = removedNode.parent;
			var childNode = removedNode.left ?? removedNode.right;
			ReplaceNode(removedNode, childNode);
			if (parentNode != null) UpdateAugmentedData(parentNode);
			if (removedNode.color == BLACK)
			{
				if (childNode != null && childNode.color == RED)
				{
					childNode.color = BLACK;
				}
				else
				{
					FixTreeOnDelete(childNode, parentNode);
				}
			}
		}