Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
util/interval-tree: Introduce pc_parent
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
rth7680 committed Jul 31, 2023
1 parent 4c8baa0 commit d37a259
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions util/interval-tree.c
Expand Up @@ -68,9 +68,14 @@ typedef struct RBAugmentCallbacks {
void (*rotate)(RBNode *old, RBNode *new);
} RBAugmentCallbacks;

static inline RBNode *pc_parent(uintptr_t pc)
{
return (RBNode *)(pc & ~1);
}

static inline RBNode *rb_parent(const RBNode *n)
{
return (RBNode *)(n->rb_parent_color & ~1);
return pc_parent(n->rb_parent_color);
}

static inline RBNode *rb_red_parent(const RBNode *n)
Expand Down Expand Up @@ -532,7 +537,7 @@ static void rb_erase_augmented(RBNode *node, RBRoot *root,
* so as to bypass rb_erase_color() later on.
*/
pc = node->rb_parent_color;
parent = rb_parent(node);
parent = pc_parent(pc);
rb_change_child(node, child, parent, root);
if (child) {
child->rb_parent_color = pc;
Expand All @@ -544,7 +549,7 @@ static void rb_erase_augmented(RBNode *node, RBRoot *root,
} else if (!child) {
/* Still case 1, but this time the child is node->rb_left */
pc = node->rb_parent_color;
parent = rb_parent(node);
parent = pc_parent(pc);
tmp->rb_parent_color = pc;
rb_change_child(node, tmp, parent, root);
rebalance = NULL;
Expand Down Expand Up @@ -600,7 +605,7 @@ static void rb_erase_augmented(RBNode *node, RBRoot *root,
rb_set_parent(tmp, successor);

pc = node->rb_parent_color;
tmp = rb_parent(node);
tmp = pc_parent(pc);
rb_change_child(node, successor, tmp, root);

if (child2) {
Expand Down

0 comments on commit d37a259

Please sign in to comment.