]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ordered-set: introduce ordered_set_clear/free_with_destructor()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 26 Apr 2021 14:52:40 +0000 (23:52 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 12 May 2021 01:30:45 +0000 (10:30 +0900)
src/basic/ordered-set.h

index a377f20b1f254c8705486a0b56beb60ee10173eb..64df41766f8229eae04ce5e48970520ab38c4930 100644 (file)
@@ -75,6 +75,17 @@ void ordered_set_print(FILE *f, const char *field, OrderedSet *s);
 #define ORDERED_SET_FOREACH(e, s) \
         _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
 
+#define ordered_set_clear_with_destructor(s, f)                 \
+        ({                                                      \
+                OrderedSet *_s = (s);                           \
+                void *_item;                                    \
+                while ((_item = ordered_set_steal_first(_s)))   \
+                        f(_item);                               \
+                _s;                                             \
+        })
+#define ordered_set_free_with_destructor(s, f)                  \
+        ordered_set_free(ordered_set_clear_with_destructor(s, f))
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free);
 DEFINE_TRIVIAL_CLEANUP_FUNC(OrderedSet*, ordered_set_free_free);