My Project
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules
rbtree.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdint.h>
4 #include <stddef.h>
5 
6 #define rbtree_item(ptr, type, member) \
7  ((type*)(((char*)ptr) - offsetof(type, member)))
8 
9 typedef struct rbtree rbtree_t;
10 typedef struct rbtree_node rbtree_node_t;
11 
12 typedef void (*rbtree_node_destructor_t)(rbtree_node_t *Node);
13 typedef int (*rbtree_node_comparator_t)(const rbtree_node_t *lhs,
14  const rbtree_node_t *rhs);
16 {
17  uintptr_t parent_color;
19 };
20 
21 struct rbtree
22 {
25  size_t size;
26 };
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 void
33 rbtree_init(rbtree_t *tree,
34  rbtree_node_comparator_t comparator);
35 
36 int
37 rbtree_empty(const rbtree_t *tree);
38 
39 size_t
40 rbtree_size(const rbtree_t *tree);
41 
42 __attribute__((warn_unused_result))
46 
47 void
50 
52 rbtree_find(const rbtree_t *tree,
53  const rbtree_node_t *node);
54 
56 rbtree_min(const rbtree_t *tree);
57 
59 rbtree_max(const rbtree_t *tree);
60 
63 
66 
70  rbtree_node_destructor_t destructor);
71 
72 void
74  rbtree_node_destructor_t destructor);
75 
76 #ifdef __cplusplus
77 }
78 #endif
rbtree_node_t * node
Definition: rbtree.h:45
size_t size
Definition: rbtree.h:25
rbtree_node_t * rbtree_max(const rbtree_t *tree)
Definition: rbtree_minmax.c:30
rbtree_node_t * rbtree_node_next(const rbtree_node_t *node)
rbtree_node_t * rbtree_min(const rbtree_t *tree)
Definition: rbtree_minmax.c:20
rbtree_node_t * rbtree_find(const rbtree_t *tree, const rbtree_node_t *node)
Definition: rbtree_find.c:5
uintptr_t parent_color
Definition: rbtree.h:17
rbtree_node_t * rbtree_insert(rbtree_t *tree, rbtree_node_t *node)
Definition: rbtree_insert.c:85
void rbtree_init(rbtree_t *tree, rbtree_node_comparator_t comparator)
Definition: rbtree_init.c:4
rbtree_node_t * rbtree_remove(rbtree_t *tree, rbtree_node_t *node, rbtree_node_destructor_t destructor)
Definition: rbtree_remove.c:59
int(* rbtree_node_comparator_t)(const rbtree_node_t *lhs, const rbtree_node_t *rhs)
Definition: rbtree.h:13
int rbtree_empty(const rbtree_t *tree)
Definition: rbtree_empty.c:4
rbtree_node_t * rbtree_node_prev(const rbtree_node_t *node)
Definition: rbtree.h:21
void rbtree_clear(rbtree_t *tree, rbtree_node_destructor_t destructor)
Definition: rbtree_clear.c:5
void rbtree_insert_multi(rbtree_t *tree, rbtree_node_t *node)
Definition: rbtree_insert.c:92
size_t rbtree_size(const rbtree_t *tree)
Definition: rbtree_size.c:4
void(* rbtree_node_destructor_t)(rbtree_node_t *Node)
Definition: rbtree.h:12
__attribute__((warn_unused_result)) rbtree_node_t *rbtree_insert(rbtree_t *tree
rbtree_node_t * root
Definition: rbtree.h:23
rbtree_node_comparator_t comparator
Definition: rbtree.h:24
rbtree_node_t * child[2]
Definition: rbtree.h:18