]> git.lizzy.rs Git - dragonstd.git/blobdiff - bits/wrappers.h
Use void pointers for callback args
[dragonstd.git] / bits / wrappers.h
index 59855193c487bfe1320f9f77e427e8b024b1db88..62bce2b7f67f6ed2cc2b54b5044e4b5e736f7c02 100644 (file)
@@ -1,26 +1,28 @@
+#include "callback.h" // for Transformer, Callback
+
 #define WRAP_NODE_FUNCTIONS(Type, prefix) \
-       bool prefix ## add(Type *self, void *dat, Comparator cmp, Transformer trans) \
+       bool prefix ## add(Type *self, void *dat, void *cmp, void *trans) \
        { \
                Type ## Node **node = prefix ## nfd(self, dat, cmp); \
  \
                if (*node) \
                        return false; \
  \
-               prefix ## nmk(self, node, trans ? trans(dat) : dat); \
+               prefix ## nmk(self, node, trans ? ((Transformer) trans)(dat) : dat); \
                return true; \
        } \
  \
-       void *prefix ## get(Type *self, void *key, Comparator cmp, Transformer trans) \
+       void *prefix ## get(Type *self, void *key, void *cmp, void *trans) \
        { \
                Type ## Node **node = prefix ## nfd(self, key, cmp); \
  \
                if (!*node) \
                        return NULL; \
  \
-               return trans ? trans((*node)->dat) : (*node)->dat; \
+               return trans ? ((Transformer) trans)((*node)->dat) : (*node)->dat; \
        } \
  \
-       bool prefix ## del(Type *self, void *key, Comparator cmp, Callback call, void *arg, Transformer trans) \
+       bool prefix ## del(Type *self, void *key, void *cmp, void *call, void *arg, void *trans) \
        { \
                Type ## Node **node = prefix ## nfd(self, key, cmp); \
  \
@@ -28,7 +30,7 @@
                        return false; \
  \
                if (call) \
-                       call(trans ? trans((*node)->dat) : (*node)->dat, arg); \
+                       ((Callback) call)(trans ? ((Transformer) trans)((*node)->dat) : (*node)->dat, arg); \
  \
                prefix ## nrm(self, node); \
                return true; \