5 Bintree bintree_create(size_t key_size)
13 static BintreeNode **search_recursive(Bintree *tree, BintreeNode **nodeptr, void *key)
18 if ((cond = memcmp((*nodeptr)->key, key, tree->key_size)) == 0)
21 return search_recursive(tree, &(*nodeptr)->left, key);
23 return search_recursive(tree, &(*nodeptr)->right, key);
29 BintreeNode **bintree_search(Bintree *tree, void *key)
31 return search_recursive(tree, &tree->root, key);
34 void bintree_add_node(Bintree *tree, BintreeNode **nodeptr, void *key, void *value)
36 *nodeptr = malloc(sizeof(BintreeNode));
37 (*nodeptr)->key = malloc(tree->key_size);
38 memcpy((*nodeptr)->key, key, tree->key_size);
39 (*nodeptr)->value = value;
40 (*nodeptr)->left = (*nodeptr)->right = NULL;
43 static void free_recursive(BintreeNode *node, BintreeFreeFunction func, void *arg)
46 free_recursive(node->left, func, arg);
47 free_recursive(node->right, func, arg);
50 func(node->value, arg);
55 void bintree_clear(Bintree *tree, BintreeFreeFunction func, void *arg)
58 free_recursive(tree->root, func, arg);