summaryrefslogtreecommitdiff
path: root/lib/darr.h
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2024-06-13 00:20:09 -0500
committerGitHub <noreply@github.com>2024-06-13 00:20:09 -0500
commit2e02bd2366ebf877963802d79e66b805ccffbf4c (patch)
tree4131dc2e92ef2678f6c1cc1de6e1dddc56d4b1bc /lib/darr.h
parentd8e3121cb8470fe9a934100de9170b4ef48b17a6 (diff)
parent27e369487eb602b75ea353e8c21333bd83032a86 (diff)
Merge pull request #16184 from LabNConsulting/chopps/fe-notify-select
mgmtd: add notification selection to front-end API
Diffstat (limited to 'lib/darr.h')
-rw-r--r--lib/darr.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/darr.h b/lib/darr.h
index 404869d9a2..2b9a0a0c02 100644
--- a/lib/darr.h
+++ b/lib/darr.h
@@ -24,6 +24,8 @@
* - darr_ensure_i
* - darr_ensure_i_mt
* - darr_free
+ * - darr_free_free
+ * - darr_free_func
* - darr_insert
* - darr_insert_mt
* - darr_insertz
@@ -218,6 +220,41 @@ void *__darr_resize(void *a, uint count, size_t esize, struct memtype *mt);
} while (0)
/**
+ * Free memory allocated for the dynamic array `A`, calling `darr_free` for
+ * each element of the array first.
+ *
+ * Args:
+ * A: The dynamic array, can be NULL.
+ */
+#define darr_free_free(A) \
+ do { \
+ for (uint __i = 0; __i < darr_len(A); __i++) \
+ if ((A)[__i]) { \
+ struct darr_metadata *__meta = \
+ _darr_meta((A)[__i]); \
+ XFREE(__meta->mtype, __meta); \
+ } \
+ darr_free(A); \
+ } while (0)
+
+/**
+ * Free memory allocated for the dynamic array `A`, calling `F` routine
+ * for each element of the array first.
+ *
+ * Args:
+ * A: The dynamic array, can be NULL.
+ * F: The function to call for each element.
+ */
+
+#define darr_free_func(A, F) \
+ do { \
+ for (uint __i = 0; __i < darr_len(A); __i++) { \
+ F((A)[__i]); \
+ } \
+ darr_free(A); \
+ } while (0)
+
+/**
* Make sure that there is room in the dynamic array `A` to add `C` elements.
*
* Available space is `darr_cap(a) - darr_len(a)`.