11 #include "../config.h"
35 int (*
compare)(
const void *a,
const void *b);
52 if (compare == NULL || tree == NULL) {
59 (*tree)->compare = compare;
69 if (free_data != NULL) {
70 free_data(root->
data);
96 return root != NULL && root->
red;
104 root->
ch[!dir] = save->
ch[dir];
105 save->
ch[dir] = root;
154 if (tree == NULL ||
data == NULL) {
158 if (tree->
root == NULL) {
161 if (tree->
root == NULL) {
167 struct iso_rbnode head = { 0, {NULL, NULL}, 0 };
171 int dir = 0, last = 0;
177 q = t->
ch[1] = tree->
root;
197 int dir2 = (t->
ch[1] == g);
199 if (q == p->
ch[last]) {
257 int (*include_item)(
void *))
263 if (include_item == NULL || include_item(root->
data)) {
264 array[pos++] = root->
data;
288 void **array, **new_array;
290 array = malloc((tree->
size + 1) *
sizeof(
void*));
299 new_array = realloc(array, (pos + 1) *
sizeof(
void*));
300 if (new_array == NULL) {
301 free((
char *) array);
314 int (*include_item)(
void *))
320 if (include_item == NULL || include_item(root->
data)) {
338 int (*include_item)(
void *))
struct iso_rbnode * ch[2]
int(* compare)(const void *a, const void *b)
static struct iso_rbnode * iso_rbtree_double(struct iso_rbnode *root, int dir)
size_t iso_rbtree_count_array(IsoRBTree *tree, size_t initial_count, int(*include_item)(void *))
static void rbtree_destroy_aux(struct iso_rbnode *root, void(*free_data)(void *))
size_t iso_rbtree_get_size(IsoRBTree *tree)
static size_t rbtree_to_array_aux(struct iso_rbnode *root, void **array, size_t pos, int(*include_item)(void *))
void iso_rbtree_destroy(IsoRBTree *tree, void(*free_data)(void *))
int iso_rbtree_new(int(*compare)(const void *, const void *), IsoRBTree **tree)
static struct iso_rbnode * iso_rbnode_new(void *data)
static int is_red(struct iso_rbnode *root)
static struct iso_rbnode * iso_rbtree_single(struct iso_rbnode *root, int dir)
static size_t rbtree_count_array_aux(struct iso_rbnode *root, size_t pos, int(*include_item)(void *))
int iso_rbtree_insert(IsoRBTree *tree, void *data, void **item)
void ** iso_rbtree_to_array(IsoRBTree *tree, int(*include_item)(void *), size_t *size)