]> git.lizzy.rs Git - dragonstd.git/blob - bits/wrappers.h
66093a212deec4df5ed56c01b70763cf62f96af2
[dragonstd.git] / bits / wrappers.h
1 #define WRAP_NODE_FUNCTIONS(Type, prefix) \
2         void *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                         prefix ## nmk(self, node, trans ? trans(dat) : dat); \
8  \
9                 return (*node)->dat; \
10         } \
11  \
12         void *prefix ## get(Type *self, void *key, Comparator cmp, Transformer trans) \
13         { \
14                 Type ## Node **node = prefix ## nfd(self, key, cmp); \
15  \
16                 if (! *node) \
17                         return NULL; \
18  \
19                 return trans ? trans((*node)->dat) : (*node)->dat; \
20         } \
21  \
22         void *prefix ## del(Type *self, void *key, Comparator cmp, Transformer trans) \
23         { \
24                 Type ## Node **node = prefix ## nfd(self, key, cmp); \
25  \
26                 if (! *node) \
27                         return NULL; \
28  \
29                 void *dat = trans ? trans((*node)->dat) : (*node)->dat; \
30                 prefix ## nrm(self, node); \
31                 return dat; \
32         }