mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 20:58:22 +00:00
27 lines
995 B
C
27 lines
995 B
C
#ifndef _RBTREE_H
|
|
#define _RBTREE_H
|
|
|
|
typedef struct rbtree_t {
|
|
struct rbtree_t *left, *right, *parent;
|
|
} rbtree_t;
|
|
|
|
// return -1 when a < b
|
|
// return 0 when a = b
|
|
// return 1 when a > b
|
|
typedef int (*rbtree_compare_fn_t)(rbtree_t *a, rbtree_t *b);
|
|
typedef int (*rbtree_value_compare_fn_t)(void *a, rbtree_t *b);
|
|
typedef void (*rbtree_print_fn_t)(rbtree_t *node);
|
|
|
|
rbtree_t *rbtree_lookup(rbtree_t *rbtree, void *key, rbtree_value_compare_fn_t compare_fn);
|
|
void rbtree_insert(rbtree_t **rbtreep, rbtree_t *node, rbtree_compare_fn_t compare_fn);
|
|
void rbtree_remove(rbtree_t **rbtreep, rbtree_t *node);
|
|
void rbtree_check(rbtree_t *rbtree);
|
|
void rbtree_print(rbtree_t *rbtree, rbtree_print_fn_t print_fn);
|
|
rbtree_t *rbtree_first(rbtree_t *rbtree);
|
|
rbtree_t *rbtree_last(rbtree_t *rbtree);
|
|
rbtree_t *rbtree_successor(rbtree_t *node);
|
|
rbtree_t *rbtree_predecessor(rbtree_t *node);
|
|
rbtree_t *rbtree_find_first_larger_equal(rbtree_t *rbtree, void *key, rbtree_value_compare_fn_t compare_fn);
|
|
|
|
#endif
|