void rb_insert_case3(struct rb_tree_node *n) { struct rb_tree_node *p = n->parent; struct rb_tree_node *g = p->parent; struct rb_tree_node *u = g->left == p ? g->right : g->left; if (u && u->color == RED) { p->color = BLACK; u->color = BLACK; g->color = RED; rb_insert_case1(g); } else { rb_insert_case4(n); } }
static void rb_insert_case3(wmem_tree_t *tree, wmem_tree_node_t *node) { wmem_tree_node_t *parent, *grandparent, *uncle; uncle = node_uncle(node); if (uncle && uncle->color == WMEM_NODE_COLOR_RED) { parent = node->parent; grandparent = parent->parent; parent->color = WMEM_NODE_COLOR_BLACK; uncle->color = WMEM_NODE_COLOR_BLACK; grandparent->color = WMEM_NODE_COLOR_RED; rb_insert_case1(tree, grandparent); } else { rb_insert_case4(tree, node); } }