31 if (node == tree->
root) {
63 tmp.uncle = gparent->
left;
66 tmp.uncle = gparent->
right;
130 goto recursively_fix;
201 if (
NULL != tmp.child) {
202 tmp.child->lpc.v = node->
lpc.
v |
207 parent->
lpc.
v = rotation;
299 tmp.sibling = parent->
left;
302 tmp.sibling = parent->
right;
311 if (
NULL != tmp.sibling) {
316 gparent->
lpc.
v = rotation;
341 rr.right = node->
right;
343 if (
NULL == sl.left) {
346 if (
NULL == rr.right) {
412 sibling = parent->
left;
415 sibling = parent->
right;
449 rr.right->lpc.v = node->
lpc.
v;
452 }
else if (
NULL == rr.right) {
486 if (successor == rr.
right) {
641 cc.child = successor->
right;
644 if (
NULL != cc.child) {
645 cc.child->lpc.v =
lpc;
649 sibling = parent->
right;
673 if (
NULL == sibling) {
727 parent->
lpc.
v = rotation;
739 rr.reverse = sibling->
left;
740 sl.same = sibling->
right;
741 if (
NULL != rr.reverse) {
748 rr.reverse = sibling->
right;
749 sl.same = sibling->
left;
750 if (
NULL != rr.reverse) {
809 if (parent != tree->
root) {
813 sibling = parent->
left;
816 sibling = parent->
right;
820 goto recursively_fix;
905 rotation = sibling->
lpc.
v;
922 if (
NULL != cc.child) {
923 cc.child->lpc.v = rr.reverse->lpc.v |
934 sibling = rr.reverse;
995 if (
NULL != rr.reverse) {
#define xwlib_rbtree_get_lnpos(lpc)
获取lpc信息中的link指针和位置信息(屏蔽颜色信息)
static struct xwlib_rbtree_node * xwlib_rbtree_get_successor(struct xwlib_rbtree_node *node)
返回节点的后继节点
#define xwlib_rbtree_tst_red(lpc)
测试当前lpc中的颜色信息是否为红色
static void xwlib_rbtree_flip_color(struct xwlib_rbtree_node *node)
反转节点的颜色
#define xwlib_rbtree_gen_lr(n)
生成节点左边的链指针、位置和红色信息
#define xwlib_rbtree_get_link(lpc)
获取lpc信息中的link指针
#define xwlib_rbtree_gen_rr(n)
生成节点右边的链指针、位置和红色信息
#define xwlib_rbtree_gen_lc(n, color)
生成节点左边的链指针、位置和颜色信息
static void xwlib_rbtree_set_black(struct xwlib_rbtree_node *node)
将节点设置为黑色
#define xwlib_rbtree_get_color(lpc)
获取lpc信息中的颜色信息
static void xwlib_rbtree_transplant(struct xwlib_rbtree_node *newn, struct xwlib_rbtree_node *oldn)
用新节点代替旧节点并继承它的链指针、颜色和位置信息, 但新节点并不接管旧节点的子节点
#define xwlib_rbtree_get_pos(lpc)
获取lpc信息中的位置信息
static struct xwlib_rbtree_node * xwlib_rbtree_get_parent(struct xwlib_rbtree_node *node)
返回节点的父节点指针
#define xwlib_rbtree_tst_right(lpc)
测试当前lpc中的位置信息是否为右侧
void xwlib_rbtree_insert_color(struct xwlib_rbtree *tree, struct xwlib_rbtree_node *node)
插入一个红色节点后修正红黑树的颜色
void xwlib_rbtree_remove(struct xwlib_rbtree *tree, struct xwlib_rbtree_node *node)
删除一个节点,并修正红黑树的颜色
#define xwlib_rbtree_tst_black(lpc)
测试当前lpc中的颜色信息是否为黑色
static void xwlib_rbtree_link(struct xwlib_rbtree_node *node, xwptr_t lpc)
链接节点,并设置位置及颜色信息
void xwlib_rbtree_replace(struct xwlib_rbtree_node *newn, struct xwlib_rbtree_node *oldn)
用一个新节点代替旧节点,继承它的颜色、位置信息并接管它的子树
#define xwlib_rbtree_gen_rc(n, color)
生成节点右边的链指针、位置和颜色信息
@ XWLIB_RBTREE_COLOR_BLACK
struct xwlib_rbtree_node * left
struct xwlib_rbtree_node * right
union xwlib_rbtree_node::@5 lpc
struct xwlib_rbtree_node * root