private static Node ReplaceCurrent(Node parent, Node previous, Node current, Node replacement)
{
if (previous == null)
{
if (!(current == parent.GetFirstChild()))
{
Kit.CodeBug();
}
parent.ReplaceChild(current, replacement);
}
else
{
if (previous.next == current)
{
// Check cachedPrev.next == current is necessary due to possible
// tree mutations
parent.ReplaceChildAfter(previous, replacement);
}
else
{
parent.ReplaceChild(current, replacement);
}
}
return replacement;
}