1#ifndef __LIBK__TREE__RBT__
2#define __LIBK__TREE__RBT__
8#define RBT_TYPE struct __rbt_type
9#warning "RBT_TYPE is not defined, using default struct __rbt_type"
14#warning "RBT_ID_NAME is not defined, using default id"
17#define FIELD_ACCESS(data_ptr, field) ((data_ptr)->field)
44 y->parent =
x->parent;
47 else if (
x ==
x->parent->left)
62 if (
x->right !=
NIL) {
65 x->parent =
y->parent;
66 if (
y->parent ==
NIL) {
68 }
else if (
y ==
y->parent->right) {
80 while (
y->parent->color ==
RBT_RED) {
82 if (
y->parent ==
y->parent->parent->left) {
91 y =
y->parent->parent;
93 if (
y ==
y->parent->right) {
107 y =
y->parent->parent;
109 if (
y ==
y->parent->left) {
132 while (curent !=
NIL) {
138 curent = curent->
left;
140 curent = curent->
right;
182 if (
x ==
x->parent->left) {
188 w =
x->parent->right;
199 w =
x->parent->right;
201 w->
color =
x->parent->color;
226 w->
color =
x->parent->color;
269 while (
y->left !=
NIL) {
272 y_original_color =
y->color;
274 if (
y->parent == z) {
279 if (
y->parent !=
NIL) {
280 y->parent->left =
y->right;
282 if (
y->right !=
NIL) {
283 y->right->parent =
y->parent;
286 if (
y->right !=
NIL) {
287 y->right->parent =
y;
300 if (
y->left !=
NIL) {
static struct ioforge_device * root
static rbt_node * rbt_search_node(rbt_node *root, uint64_t id, rbt_node *NIL)
static void rbt_rotate_right(rbt_node **root, rbt_node *y, rbt_node *NIL)
static void rbt_remove_node(rbt_node **root, rbt_node *z, rbt_node *NIL)
static void rbt_fix_delete(rbt_node **root, rbt_node *x, rbt_node *NIL)
#define FIELD_ACCESS(data_ptr, field)
static void rbt_fix_insert(rbt_node **root, rbt_node *y, rbt_node *NIL)
static void rbt_rotate_left(rbt_node **root, rbt_node *x, rbt_node *NIL)
static int rbt_insert_node(rbt_node **root, rbt_node *z, struct __rbt_type *data, rbt_node *NIL)
void memset(void *ptr, int value, size_t num)