]> git.lizzy.rs Git - dragonstd.git/blobdiff - bits/wrappers.h
Rework get,add,del return values
[dragonstd.git] / bits / wrappers.h
index 66093a212deec4df5ed56c01b70763cf62f96af2..652becbc7f1178bc80bdb533a5d394c131c37c32 100644 (file)
@@ -1,12 +1,13 @@
 #define WRAP_NODE_FUNCTIONS(Type, prefix) \
-       void *prefix ## add(Type *self, void *dat, Comparator cmp, Transformer trans) \
+       bool prefix ## add(Type *self, void *dat, Comparator cmp, Transformer trans) \
        { \
                Type ## Node **node = prefix ## nfd(self, dat, cmp); \
  \
-               if (*node) \
-                       prefix ## nmk(self, node, trans ? trans(dat) : dat); \
+               if (*node) \
+                       return false; \
  \
-               return (*node)->dat; \
+               prefix ## nmk(self, node, trans ? trans(dat) : dat); \
+               return true; \
        } \
  \
        void *prefix ## get(Type *self, void *key, Comparator cmp, Transformer trans) \
                return trans ? trans((*node)->dat) : (*node)->dat; \
        } \
  \
-       void *prefix ## del(Type *self, void *key, Comparator cmp, Transformer trans) \
+       bool prefix ## del(Type *self, void *key, Comparator cmp, Callback call) \
        { \
                Type ## Node **node = prefix ## nfd(self, key, cmp); \
  \
                if (! *node) \
-                       return NULL; \
+                       return false; \
+ \
+               if (call) \
+                       call((*node)->dat); \
  \
-               void *dat = trans ? trans((*node)->dat) : (*node)->dat; \
                prefix ## nrm(self, node); \
-               return dat; \
+               return true; \
        }