32 #if defined(RBT_IMPLICIT_LOCKING) 36 #ifndef HAVE_POSIX_MEMALIGN 38 int posix_memalign(
void **memptr,
size_t alignment,
size_t size);
50 RBT_WALK_PREORDER = 0x01,
51 RBT_WALK_INORDER = 0x02,
52 RBT_WALK_POSTORDER = 0x03,
53 RBT_WALK_LEVELORDER = 0x04,
54 RBT_WALK_RAWNODE = 0x10
57 #define RBT_WALK_TYPEMASK 0x0f 58 #define RBT_WALK_FLAGMASK 0xf0 76 register uintptr_t nodep_uint = (uintptr_t)(nodep);
77 nodep_uint &= UINTPTR_MAX << 1;
78 return (
struct rbt_node *)(nodep_uint);
81 #define rbt_node_setptr(dst,src) (dst) = (struct rbt_node *)((uintptr_t)rbt_node_ptr(src)|((uintptr_t)(dst)&1)) 83 #define rbt_node_setcolor(np, cb) \ 85 register struct rbt_node *__n = rbt_node_ptr(np); \ 86 register uint8_t __c = (cb) & 1; \ 89 if (__c) __n->_chld[0] = (struct rbt_node *)((uintptr_t)(__n->_chld[0]) | 1); \ 90 else __n->_chld[0] = rbt_node_ptr(__n->_chld[0]); \ 93 #define rbt_node_getcolor_raw(cp) ((uintptr_t)(cp) & 1) 94 #define rbt_node_getcolor(np) (rbt_node_ptr(np) == NULL ? RBT_NODE_CB : rbt_node_getcolor_raw(rbt_node_ptr(np)->_chld[0])) 95 #define rbt_node_cpycolor(dn, sn) rbt_node_setcolor((dn), rbt_node_getcolor(sn)) 97 #define rbt_hpush4(__a, __p) \ 105 #define rbt_hpush3(__a, __p) \ 112 #define rbt_redfix(__h, __d, v) \ 114 if (((__d) & 3) < 2) { \ 115 if (((__d) & 3) == 0) { \ 116 rbt_node_setptr(v, rbt_node_rotate_R(__h[2])); \ 118 rbt_node_setptr(v, rbt_node_rotate_RL(__h[2])); \ 121 if (((__d) & 3) == 2) { \ 122 rbt_node_setptr(v, rbt_node_rotate_LR(__h[2])); \ 124 rbt_node_setptr(v, rbt_node_rotate_L(__h[2])); \ 133 #if defined(RBT_IMPLICIT_LOCKING) 134 pthread_rwlock_t lock;
138 typedef struct rbt rbt_t;
144 rbt_t *rbt_new(rbt_type_t type);
152 void rbt_free(rbt_t *
rbt,
void (*callback)(
void *));
153 void rbt_free2(rbt_t *rbt,
void (*callback)(
void *,
void *),
void *user);
159 int rbt_rlock(rbt_t *rbt);
165 void rbt_runlock(rbt_t *rbt);
171 int rbt_wlock(rbt_t *rbt);
177 void rbt_wunlock(rbt_t *rbt);
184 size_t rbt_size(rbt_t *rbt);
186 #define rbt_walk_push(n) stack[depth++] = (n) 187 #define rbt_walk_pop() stack[--depth] 188 #define rbt_walk_top() stack[depth-1] 190 int rbt_walk_preorder(rbt_t *rbt,
int (*callback)(
void *), rbt_walk_t flags);
191 int rbt_walk_inorder(rbt_t *rbt,
int (*callback)(
void *), rbt_walk_t flags);
192 int rbt_walk_inorder2(rbt_t *rbt,
int (*callback)(
void *,
void *),
void *user, rbt_walk_t flags);
193 int rbt_walk_postorder(rbt_t *rbt,
int (*callback)(
void *), rbt_walk_t flags);
Definition: _sexp-value.h:42
Definition: rbt_common.h:129
Generic node structure Lowest bit of _chld[0] holds the color bit.
Definition: rbt_common.h:64