Red black tree
struct rbt_node { enum rbt_node_color color; struct rbt_node *left; struct rbt_node *right; struct rbt_node *parent;};struct rbt_node referenced types:
struct rbt { rbt_get_data get_data; rbt_compare compare; struct rbt_node *root;};struct rbt referenced types:
enum rbt_node_color { TREE_NODE_RED, TREE_NODE_BLACK,};typedef int32_t (*rbt_compare)(struct rbt_node * a, struct rbt_node * b);type alias rbt_compare referenced types:
typedef size_t (*rbt_get_data)(struct rbt_node *);type alias rbt_get_data referenced types:
struct rbt_node rbt_last(struct rbt *root);rbt_last referenced types:
struct rbt_node rbt_prev(struct rbt_node *node);rbt_prev referenced types:
void rbt_init_node(struct rbt_node *n);rbt_init_node referenced types:
struct rbt_node rbt_first(struct rbt *root);rbt_first referenced types:
struct rbt * rbt_init(struct rbt *t, rbt_get_data get_data, rbt_compare compare);rbt_init referenced types:
struct rbt * rbt_create(rbt_get_data get, rbt_compare compare);rbt_create referenced types:
struct rbt_node * rbt_find_min(struct rbt_node *node);rbt_find_min referenced types:
struct rbt_node * rbt_find_max(struct rbt_node *node);rbt_find_max referenced types:
void rbt_delete(struct rbt *tree, struct rbt_node *z);rbt_delete referenced types:
struct rbt_node * rbt_search(struct rbt *tree, uint64_t data);rbt_search referenced types:
void rbt_remove(struct rbt *tree, uint64_t data);rbt_remove referenced types:
void rbt_insert(struct rbt *tree, struct rbt_node *new_node);rbt_insert referenced types:
struct rbt_node * rbt_min(struct rbt *tree);rbt_min referenced types:
struct rbt_node * rbt_max(struct rbt *tree);rbt_max referenced types:
struct rbt_node * rbt_next(struct rbt_node *node);rbt_next referenced types:
struct rbt_node * rbt_find_predecessor(struct rbt *tree, uint64_t data);rbt_find_predecessor referenced types:
struct rbt_node * rbt_find_successor(struct rbt *tree, uint64_t data);rbt_find_successor referenced types:
bool rbt_empty(struct rbt *tree);rbt_empty referenced types:
bool rbt_has_node(struct rbt *tree, struct rbt_node *node);rbt_has_node referenced types:
Defines
Section titled “Defines”#define rbt_for_each_safe(pos, tmp, root) \ for (pos = rbt_first(root), tmp = rbt_next(pos); pos != NULL; \ pos = tmp, tmp = rbt_next(pos))#define rbt_for_each(pos, root) \ for (pos = rbt_first(root); pos != NULL; pos = rbt_next(pos))#define rbt_for_each_reverse(pos, root) \ for (pos = rbt_last(root); pos != NULL; pos = rbt_prev(pos))#define rbt_entry(ptr, type, member) container_of(ptr, type, member)#define rbt_parent(n) ((n)->parent)#define RBT_NODE_INIT \ (struct rbt_node) { \ .color = TREE_NODE_BLACK, .left = NULL, .right = NULL, .parent = NULL \ }