- Finish implementing RtlSplayTree
Modified: trunk/reactos/lib/rtl/splaytree.c
_____
Modified: trunk/reactos/lib/rtl/splaytree.c
--- trunk/reactos/lib/rtl/splaytree.c 2005-11-08 23:47:25 UTC (rev
19076)
+++ trunk/reactos/lib/rtl/splaytree.c 2005-11-08 23:51:46 UTC (rev
19077)
@@ -69,7 +69,7 @@
}
/*
-* @unimplemented
+* @implemented
*/
PRTL_SPLAY_LINKS
NTAPI
@@ -249,7 +249,18 @@
/* "Finally" case: N doesn't have a grandparent => P is
root */
else
{
+ /* P's left-child becomes N's right child */
+ RtlLeftChild(P) = RtlRightChild(N);
+ /* If it exists, update its parent pointer too */
+ if (RtlLeftChild(P)) RtlParent(RtlLeftChild(P)) = P;
+
+ /* Now make N the root, no need to worry about
references */
+ N->Parent = N;
+
+ /* And make P its right child */
+ N->RightChild = P;
+ P->Parent = N;
}
}
/* Case 2 & 4: N is right child of P */
@@ -380,7 +391,18 @@
/* "Finally" case: N doesn't have a grandparent => P is
root */
else
{
+ /* P's right-child becomes N's left child */
+ RtlRightChild(P) = RtlLeftChild(N);
+ /* If it exists, update its parent pointer too */
+ if (RtlRightChild(P)) RtlParent(RtlRightChild(P)) = P;
+
+ /* Now make N the root, no need to worry about
references */
+ N->Parent = N;
+
+ /* And make P its left child */
+ N->LeftChild = P;
+ P->Parent = N;
}
}
}
Show replies by date