- Fix RtlSubtreePredecessor/Successor, someone had implemented them backwards. Modified: trunk/reactos/lib/rtl/splaytree.c _____
Modified: trunk/reactos/lib/rtl/splaytree.c --- trunk/reactos/lib/rtl/splaytree.c 2005-11-09 00:56:41 UTC (rev 19079) +++ trunk/reactos/lib/rtl/splaytree.c 2005-11-09 01:05:00 UTC (rev 19080) @@ -411,49 +411,44 @@
return N; }
- /* * @implemented */ -PRTL_SPLAY_LINKS NTAPI -RtlSubtreePredecessor (IN PRTL_SPLAY_LINKS Links) +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreePredecessor(IN PRTL_SPLAY_LINKS Links) { - PRTL_SPLAY_LINKS Child; + PRTL_SPLAY_LINKS Child;
- Child = Links->RightChild; - if (Child == NULL) - return NULL; + /* Get the left child */ + Child = RtlLeftChild(Links); + if (!Child) return NULL;
- if (Child->LeftChild == NULL) - return Child; + /* Get right-most child */ + while (RtlRightChild(Child)) Child = RtlRightChild(Child);
- /* Get left-most child */ - while (Child->LeftChild != NULL) - Child = Child->LeftChild; - - return Child; + /* Return it */ + return Child; }
/* * @implemented */ -PRTL_SPLAY_LINKS NTAPI -RtlSubtreeSuccessor (IN PRTL_SPLAY_LINKS Links) +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreeSuccessor(IN PRTL_SPLAY_LINKS Links) { - PRTL_SPLAY_LINKS Child; + PRTL_SPLAY_LINKS Child;
- Child = Links->LeftChild; - if (Child == NULL) - return NULL; + /* Get the right child */ + Child = RtlRightChild(Links); + if (!Child) return NULL;
- if (Child->RightChild == NULL) - return Child; + /* Get left-most child */ + while (RtlLeftChild(Child)) Child = RtlLeftChild(Child);
- /* Get right-most child */ - while (Child->RightChild != NULL) - Child = Child->RightChild; - - return Child; + /* Return it */ + return Child; }
/* EOF */