]> git.lizzy.rs Git - dragonstd.git/blobdiff - map.c
Merge branch 'main' of https://github.com/dragonblocks/dragonstd
[dragonstd.git] / map.c
diff --git a/map.c b/map.c
index 61e971cd24368098a86fbefb1b4076550c2b5b2e..abdd7052ed7d36e77662899932d6b5a1389d47e3 100644 (file)
--- a/map.c
+++ b/map.c
@@ -6,7 +6,7 @@ static bool get_lock(Map *map, bool write)
 
        pthread_rwlock_rdlock(&map->clk);
 
-       if ((success = ! map->cnl)) {
+       if ((success = !map->cnl)) {
                if (write)
                        pthread_rwlock_wrlock(&map->tlk);
                else
@@ -45,24 +45,24 @@ void map_cnl(Map *map, Iterator iter, void *arg, Transformer trans, TreeTraversi
        pthread_rwlock_unlock(&map->tlk);
 }
 
-#define WRAP_TREE_FUNC(name, write) \
-       void *map_ ## name(Map *map, void *dat, Comparator cmp, Transformer trans) \
+#define WRAP_TREE_FUNC(type, name, write, CallbackType, null) \
+       type map_ ## name(Map *map, void *dat, Comparator cmp, CallbackType func) \
        { \
-               if (! get_lock(map, write)) \
-                       return NULL; \
+               if (!get_lock(map, write)) \
+                       return null; \
  \
-               dat = tree_ ## name(&map->tre, dat, cmp, trans); \
+               type ret = tree_ ## name(&map->tre, dat, cmp, func); \
                pthread_rwlock_unlock(&map->tlk); \
-               return dat; \
+               return ret; \
        }
 
-WRAP_TREE_FUNC(add, true)
-WRAP_TREE_FUNC(get, false)
-WRAP_TREE_FUNC(del, true)
+WRAP_TREE_FUNC(bool,   add, true,  Transformer, false)
+WRAP_TREE_FUNC(void *, get, false, Transformer, NULL)
+WRAP_TREE_FUNC(bool,   del, true,  Callback,    false)
 
 void map_trv(Map *map, Iterator iter, void *arg, Transformer trans, TreeTraversionOrder order)
 {
-       if (! get_lock(map, false))
+       if (!get_lock(map, false))
                return;
 
        tree_trv(&map->tre, iter, arg, trans, order);