217#define rbtree_pair_key(p) p->node->key 
  228#define rbtree_pair_value(p) p->node->value 
  297#define rbtree_iter_key(iter) iter.sp->node->key 
  308#define rbtree_iter_value(iter) iter.sp->node->value 
int32_t(* CompareFunc)(const void *a, const void *b)
void(* FreeFunc)(void *p)
Allocate memory blocks of same sizes.
void * rbtree_iter_get_value(const RBTreeIter *iter)
bool rbtree_remove(RBTree *tree, const void *key)
bool rbtree_key_exists(const RBTree *tree, const void *key)
RBTreeIterStackItem * stack
void * rbtree_pair_get_key(const RBTreePair *pair)
void rbtree_pair_set_value(RBTreePair *pair, void *value)
void rbtree_init(RBTree *tree, CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value, Pool *pool)
RBTreePair * rbtree_lookup(RBTree *tree, const void *key)
void rbtree_iter_init(const RBTree *tree, RBTreeIter *iter)
void rbtree_clear(RBTree *tree)
void rbtree_destroy(RBTree *tree)
size_t rbtree_count(const RBTree *tree)
void rbtree_iter_reuse(const RBTree *tree, RBTreeIter *iter)
RBTreeInsertResult rbtree_set(RBTree *tree, void *key, void *value, bool replace_key)
RBTree * rbtree_new(CompareFunc compare_keys, FreeFunc free_key, FreeFunc free_value, Pool *pool)
void * rbtree_iter_get_key(const RBTreeIter *iter)
bool rbtree_iter_next(RBTreeIter *iter)
RBTreeInsertResult
result of rbtree_set() method.
@ RBTREE_INSERT_RESULT_NEW
@ RBTREE_INSERT_RESULT_REPLACED
@ RBTREE_INSERT_RESULT_FAILED
struct _RBTreePair RBTreePair
void * rbtree_pair_get_value(const RBTreePair *pair)
void rbtree_iter_free(RBTreeIter *iter)
void rbtree_free(RBTree *tree)
Structure holding node data.
Structure to iterate over the elements of a RBTree.
Structure holding a node and the iteration state.
Allocate groups of equal-sized chunks of memory.