tree: rename 'FIXUP' macros to 'REBALANCE'
This commit is contained in:
parent
3ad20d71ff
commit
efa35adbc5
44
src/tree.c
44
src/tree.c
@ -51,23 +51,23 @@ static inline void tree__rotate_right(tree_t* tree, tree_node_t* node) {
|
|||||||
break; \
|
break; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TREE__FIXUP_AFTER_INSERT(cis, trans) \
|
#define TREE__REBALANCE_AFTER_INSERT(cis, trans) \
|
||||||
tree_node_t* grandparent = parent->parent; \
|
tree_node_t* grandparent = parent->parent; \
|
||||||
tree_node_t* uncle = grandparent->trans; \
|
tree_node_t* uncle = grandparent->trans; \
|
||||||
\
|
\
|
||||||
if (uncle && uncle->red) { \
|
if (uncle && uncle->red) { \
|
||||||
parent->red = uncle->red = false; \
|
parent->red = uncle->red = false; \
|
||||||
grandparent->red = true; \
|
grandparent->red = true; \
|
||||||
node = grandparent; \
|
node = grandparent; \
|
||||||
} else { \
|
} else { \
|
||||||
if (node == parent->trans) { \
|
if (node == parent->trans) { \
|
||||||
tree__rotate_##cis(tree, parent); \
|
tree__rotate_##cis(tree, parent); \
|
||||||
node = parent; \
|
node = parent; \
|
||||||
parent = node->parent; \
|
parent = node->parent; \
|
||||||
} \
|
} \
|
||||||
parent->red = false; \
|
parent->red = false; \
|
||||||
grandparent->red = true; \
|
grandparent->red = true; \
|
||||||
tree__rotate_##trans(tree, grandparent); \
|
tree__rotate_##trans(tree, grandparent); \
|
||||||
}
|
}
|
||||||
|
|
||||||
int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
|
int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
|
||||||
@ -95,9 +95,9 @@ int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
|
|||||||
|
|
||||||
for (; parent && parent->red; parent = node->parent) {
|
for (; parent && parent->red; parent = node->parent) {
|
||||||
if (parent == parent->parent->left) {
|
if (parent == parent->parent->left) {
|
||||||
TREE__FIXUP_AFTER_INSERT(left, right)
|
TREE__REBALANCE_AFTER_INSERT(left, right)
|
||||||
} else {
|
} else {
|
||||||
TREE__FIXUP_AFTER_INSERT(right, left)
|
TREE__REBALANCE_AFTER_INSERT(right, left)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tree->root->red = false;
|
tree->root->red = false;
|
||||||
@ -105,7 +105,7 @@ int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TREE__FIXUP_AFTER_REMOVE(cis, trans) \
|
#define TREE__REBALANCE_AFTER_REMOVE(cis, trans) \
|
||||||
tree_node_t* sibling = parent->trans; \
|
tree_node_t* sibling = parent->trans; \
|
||||||
\
|
\
|
||||||
if (sibling->red) { \
|
if (sibling->red) { \
|
||||||
@ -191,9 +191,9 @@ void tree_del(tree_t* tree, tree_node_t* node) {
|
|||||||
if (node == tree->root)
|
if (node == tree->root)
|
||||||
break;
|
break;
|
||||||
if (node == parent->left) {
|
if (node == parent->left) {
|
||||||
TREE__FIXUP_AFTER_REMOVE(left, right)
|
TREE__REBALANCE_AFTER_REMOVE(left, right)
|
||||||
} else {
|
} else {
|
||||||
TREE__FIXUP_AFTER_REMOVE(right, left)
|
TREE__REBALANCE_AFTER_REMOVE(right, left)
|
||||||
}
|
}
|
||||||
node = parent;
|
node = parent;
|
||||||
parent = parent->parent;
|
parent = parent->parent;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user