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