gparent = rb_red_parent(parent);
- if (parent == gparent->rb_left) {
- tmp = gparent->rb_right;
+ tmp = gparent->rb_right;
+ if (parent != tmp) { /* parent == gparent->rb_left */
if (tmp && rb_is_red(tmp)) {
/*
* Case 1 - color flips
continue;
}
- if (parent->rb_right == node) {
+ tmp = parent->rb_right;
+ if (node == tmp) {
/*
* Case 2 - left rotate at parent
*
RB_BLACK);
rb_set_parent_color(parent, node, RB_RED);
parent = node;
+ tmp = node->rb_right;
}
/*
* / \
* n U
*/
- gparent->rb_left = tmp = parent->rb_right;
+ gparent->rb_left = tmp; /* == parent->rb_right */
parent->rb_right = gparent;
if (tmp)
rb_set_parent_color(tmp, gparent, RB_BLACK);
continue;
}
- if (parent->rb_left == node) {
+ tmp = parent->rb_left;
+ if (node == tmp) {
/* Case 2 - right rotate at parent */
parent->rb_left = tmp = node->rb_right;
node->rb_right = parent;
RB_BLACK);
rb_set_parent_color(parent, node, RB_RED);
parent = node;
+ tmp = node->rb_left;
}
/* Case 3 - left rotate at gparent */
- gparent->rb_right = tmp = parent->rb_left;
+ gparent->rb_right = tmp; /* == parent->rb_left */
parent->rb_left = gparent;
if (tmp)
rb_set_parent_color(tmp, gparent, RB_BLACK);
break;
} else if (!parent) {
break;
- } else if (parent->rb_left == node) {
- sibling = parent->rb_right;
+ }
+ sibling = parent->rb_right;
+ if (node != sibling) { /* node == parent->rb_left */
if (rb_is_red(sibling)) {
/*
* Case 1 - left rotate at parent