From fe03ec8bde67459ae841f14f305e9c8fd5838109 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 3 Jul 2018 21:35:47 +0200 Subject: [PATCH] array: add some more helpers --- src/pipewire/array.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pipewire/array.h b/src/pipewire/array.h index 18804c75f..0bb7153ec 100644 --- a/src/pipewire/array.h +++ b/src/pipewire/array.h @@ -53,11 +53,20 @@ struct pw_array { /** Check if an item with index \a idx and type \a t exist in array \memberof pw_array */ #define pw_array_check_index(a,idx,t) pw_array_check_index_s(a,idx,sizeof(t)) -#define pw_array_for_each(pos, array) \ - for (pos = (__typeof__(pos)) (array)->data; \ - (const uint8_t *) pos < ((const uint8_t *) (array)->data + (array)->size); \ +#define pw_array_first(a) ((a)->data) +#define pw_array_end(a) ((const uint8_t*)(a)->data + (a)->size) +#define pw_array_check(a,p) ((const uint8_t*)(p) < pw_array_end(a)) + +#define pw_array_for_each(pos, array) \ + for (pos = (__typeof__(pos)) pw_array_first(array); \ + pw_array_check(array, pos); \ (pos)++) +#define pw_array_remove(a,p) \ + memmove(p, SPA_MEMBER((p), sizeof(*(p)), void), \ + SPA_PTRDIFF((p), pw_array_end(a)) - sizeof(*(p))); + + /** Initialize the array with given extend \memberof pw_array */ static inline void pw_array_init(struct pw_array *arr, size_t extend) {