Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 332396
b: refs/heads/master
c: 59633ab
h: refs/heads/master
v: v3
  • Loading branch information
Michel Lespinasse authored and Linus Torvalds committed Oct 9, 2012
1 parent a810d5a commit af5f807
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7ce6ff9e5de99e7b72019c7de82fb438fe1dc5a0
refs/heads/master: 59633abf34e2f44b8e772a2c12a92132aa7c2220
21 changes: 13 additions & 8 deletions trunk/lib/rbtree.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,8 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)

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
Expand All @@ -131,7 +131,8 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)
continue;
}

if (parent->rb_right == node) {
tmp = parent->rb_right;
if (node == tmp) {
/*
* Case 2 - left rotate at parent
*
Expand All @@ -151,6 +152,7 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)
RB_BLACK);
rb_set_parent_color(parent, node, RB_RED);
parent = node;
tmp = node->rb_right;
}

/*
Expand All @@ -162,7 +164,7 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)
* / \
* 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);
Expand All @@ -180,7 +182,8 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)
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;
Expand All @@ -189,10 +192,11 @@ void rb_insert_color(struct rb_node *node, struct rb_root *root)
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);
Expand Down Expand Up @@ -223,8 +227,9 @@ static void __rb_erase_color(struct rb_node *node, struct rb_node *parent,
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
Expand Down

0 comments on commit af5f807

Please sign in to comment.