]> git.lizzy.rs Git - dragonstd.git/blob - bits/wrappers.h
59855193c487bfe1320f9f77e427e8b024b1db88
[dragonstd.git] / bits / wrappers.h
1 #define WRAP_NODE_FUNCTIONS(Type, prefix) \
2         bool prefix ## add(Type *self, void *dat, Comparator cmp, Transformer trans) \
3         { \
4                 Type ## Node **node = prefix ## nfd(self, dat, cmp); \
5  \
6                 if (*node) \
7                         return false; \
8  \
9                 prefix ## nmk(self, node, trans ? trans(dat) : dat); \
10                 return true; \
11         } \
12  \
13         void *prefix ## get(Type *self, void *key, Comparator cmp, Transformer trans) \
14         { \
15                 Type ## Node **node = prefix ## nfd(self, key, cmp); \
16  \
17                 if (!*node) \
18                         return NULL; \
19  \
20                 return trans ? trans((*node)->dat) : (*node)->dat; \
21         } \
22  \
23         bool prefix ## del(Type *self, void *key, Comparator cmp, Callback call, void *arg, Transformer trans) \
24         { \
25                 Type ## Node **node = prefix ## nfd(self, key, cmp); \
26  \
27                 if (!*node) \
28                         return false; \
29  \
30                 if (call) \
31                         call(trans ? trans((*node)->dat) : (*node)->dat, arg); \
32  \
33                 prefix ## nrm(self, node); \
34                 return true; \
35         }