void rb_insert_case4(struct rb_tree_node *n) { struct rb_tree_node * p = n->parent; struct rb_tree_node * g = p->parent; if ((n == p->right) && (p == g->left)) { rb_rotate_left(p); n = n->left; } else if ((n == p->left) && (p == g->right)) { rb_rotate_right(p); n = n->right; } rb_insert_case5(n); }
static void rb_insert_case4(wmem_tree_t *tree, wmem_tree_node_t *node) { wmem_tree_node_t *parent, *grandparent; parent = node->parent; grandparent = parent->parent; if (!grandparent) { return; } if (node == parent->right && parent == grandparent->left) { rotate_left(tree, parent); node = node->left; } else if (node == parent->left && parent == grandparent->right) { rotate_right(tree, parent); node = node->right; } rb_insert_case5(tree, node); }