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