]> git.lizzy.rs Git - dragonstd.git/blob - bintree.h
Bintree: allow custom comparators
[dragonstd.git] / bintree.h
1 #ifndef _DRAGONTYPE_BINTREE_H_
2 #define _DRAGONTYPE_BINTREE_H_
3
4 #include <stddef.h>
5
6 struct Bintree;
7
8 typedef int (*BintreeComparator)(void *v1, void *v2, struct Bintree *tree);
9 typedef void (*BintreeFreeFunction)(void *value, void *arg);
10
11 typedef struct BintreeNode
12 {
13         void *key;
14         void *value;
15         struct BintreeNode *left;
16         struct BintreeNode *right;
17 } BintreeNode;
18
19 typedef struct Bintree
20 {
21         BintreeNode *root;
22         size_t key_size;
23         BintreeComparator cmp;
24 } Bintree;
25
26 Bintree bintree_create(size_t key_size, BintreeComparator cmp);
27 BintreeNode **bintree_search(Bintree *tree, void *key);
28 void bintree_add_node(Bintree *tree, BintreeNode **nodeptr, void *key, void *value);
29 void bintree_clear(Bintree *tree, BintreeFreeFunction func, void *arg);
30
31 #endif