Red-Black Interval Tree
include/structures/rbit.h View source View on GitHubStructs
Section titled “Structs”interval
Section titled “interval”rbit_node
Section titled “rbit_node” struct rbit_node (6 fields) source
struct rbit (2 fields) source
§
rbit_augment_fn augment NULL => default interval-max
rbit_color
Section titled “rbit_color”Type Aliases
Section titled “Type Aliases”rbit_augment_fn
Section titled “rbit_augment_fn”Augmentation hook: recompute node’s augmented data purely from its own
interval and its children, and return whether anything changed
Functions
Section titled “Functions”rbit_node_max
Section titled “rbit_node_max”rbit_init_node
Section titled “rbit_init_node”rbit_first
Section titled “rbit_first”rbit_last
Section titled “rbit_last”rbit_prev
Section titled “rbit_prev”rbit_empty
Section titled “rbit_empty”rbit_init
Section titled “rbit_init”rbit_tree_create
Section titled “rbit_tree_create”rbit_find_min
Section titled “rbit_find_min”rbit_find_max
Section titled “rbit_find_max”rbit_min
Section titled “rbit_min”rbit_max
Section titled “rbit_max”rbit_next
Section titled “rbit_next”rbit_find_predecessor
Section titled “rbit_find_predecessor”rbit_find_successor
Section titled “rbit_find_successor”rbit_has_node
Section titled “rbit_has_node”rbit_delete
Section titled “rbit_delete”void rbit_delete(struct rbit *tree, struct rbit_node *cc_nonnull_ptr) source rbit_search
Section titled “rbit_search”rbit_overlap_search
Section titled “rbit_overlap_search”rbit_remove
Section titled “rbit_remove”rbit_insert
Section titled “rbit_insert”void rbit_insert(struct rbit *tree, struct rbit_node *cc_nonnull_ptr) source Macros
Section titled “Macros”rbit_for_each_safe
Section titled “rbit_for_each_safe”#define rbit_for_each_safe(pos, tmp, tree) source Expansion
#define rbit_for_each_safe(pos, tmp, tree) \
for (pos = rbit_first(tree), tmp = rbit_next(pos); pos != NULL; \
pos = tmp, tmp = rbit_next(pos)) rbit_for_each_entry_safe
Section titled “rbit_for_each_entry_safe”#define rbit_for_each_entry_safe(pos, tmp, tree, member) source Expansion
#define rbit_for_each_entry_safe(pos, tmp, tree, member) \
for (typeof(rbit_first(tree)) __n = rbit_first(tree), __nx = NULL; \
__n != NULL && \
(((pos) = rbit_entry(__n, typeof(*(pos)), member)), \
(__nx = rbit_next(__n)), \
((tmp) = __nx ? rbit_entry(__nx, typeof(*(tmp)), member) : NULL), \
true); \
__n = __nx) rbit_for_each_safe_reverse
Section titled “rbit_for_each_safe_reverse”#define rbit_for_each_safe_reverse(pos, tmp, tree) source Expansion
#define rbit_for_each_safe_reverse(pos, tmp, tree) \
for (pos = rbit_last(tree), tmp = rbit_prev(pos); pos != NULL; \
pos = tmp, tmp = rbit_prev(pos)) rbit_for_each_entry_safe_reverse
Section titled “rbit_for_each_entry_safe_reverse”#define rbit_for_each_entry_safe_reverse(pos, tmp, tree, member) source Expansion
#define rbit_for_each_entry_safe_reverse(pos, tmp, tree, member) \
for (typeof(rbit_last(tree)) __n = rbit_last(tree), __nx = NULL; \
__n != NULL && \
(((pos) = rbit_entry(__n, typeof(*(pos)), member)), \
(__nx = rbit_prev(__n)), \
((tmp) = __nx ? rbit_entry(__nx, typeof(*(tmp)), member) : NULL), \
true); \
__n = __nx) rbit_for_each
Section titled “rbit_for_each”#define rbit_for_each(pos, tree) source Expansion
#define rbit_for_each(pos, tree) \
for (pos = rbit_first(tree); pos != NULL; pos = rbit_next(pos)) rbit_for_each_entry
Section titled “rbit_for_each_entry”#define rbit_for_each_entry(pos, tree, member) source Expansion
#define rbit_for_each_entry(pos, tree, member) \
for (typeof(rbit_first(tree)) __n = rbit_first(tree); \
__n != NULL && \
(((pos) = rbit_entry(__n, typeof(*(pos)), member)), true); \
__n = rbit_next(__n)) rbit_for_each_reverse
Section titled “rbit_for_each_reverse”#define rbit_for_each_reverse(pos, tree) source Expansion
#define rbit_for_each_reverse(pos, tree) \
for (pos = rbit_last(tree); pos != NULL; pos = rbit_prev(pos)) rbit_for_each_entry_reverse
Section titled “rbit_for_each_entry_reverse”#define rbit_for_each_entry_reverse(pos, tree, member) source Expansion
#define rbit_for_each_entry_reverse(pos, tree, member) \
for (typeof(rbit_last(tree)) __n = rbit_last(tree); \
__n != NULL && \
(((pos) = rbit_entry(__n, typeof(*(pos)), member)), true); \
__n = rbit_prev(__n)) rbit_entry
Section titled “rbit_entry”#define rbit_entry(ptr, type, member) source Expansion
#define rbit_entry(ptr, type, member) container_of(ptr, type, member) rbit_parent
Section titled “rbit_parent”#define rbit_parent(n) source Expansion
#define rbit_parent(n) ((n)->parent) RBIT_NODE_INIT
Section titled “RBIT_NODE_INIT”#define RBIT_NODE_INIT source Expansion
#define RBIT_NODE_INIT \
(struct rbit_node) { \
.interval = {0, 0}, .color = RBIT_BLACK, .max = 0, .left = NULL, \
.right = NULL, .parent = NULL \
}