]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: array - Add helpers for dealing with some common array usecases
authorAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 2 Jan 2019 11:29:32 +0000 (13:29 +0200)
committerVille Savolainen <ville.savolainen@open-xchange.com>
Mon, 1 Apr 2019 10:48:51 +0000 (10:48 +0000)
Adds macros for accessing first and last item, pushing and popping
and also adding/removing first item.

Note that pop and shift do not return item.

src/lib/array.h

index 3d49bb2ea1a6a982ff42f0c5cde9a3875b077aac..b3f29ddcb8ef61327eba00e3d1eb3817ee373be6 100644 (file)
@@ -234,6 +234,16 @@ array_idx_i(const struct array *array, unsigned int idx)
        i_assert(idx < array->buffer->used / array->element_size);
        return CONST_PTR_OFFSET(array->buffer->data, idx * array->element_size);
 }
+
+#define array_first(array) array_idx(array, 0)
+#define array_first_modifiable(array) array_idx_modifiable(array, 0)
+#define array_last(array) array_idx(array, array_count(array)-1)
+#define array_last_modifiable(array) array_idx_modifiable(array, array_count(array)-1)
+#define array_pop_back(array) array_delete(array, array_count(array)-1, 1);
+#define array_push_back(array, item) array_append(array, (item), 1)
+#define array_pop_front(array) array_delete(array, 0, 1)
+#define array_push_front(array, item) array_insert(array, 0, (item), 1)
+
 #define array_idx(array, idx) \
        ARRAY_TYPE_CAST_CONST(array)array_idx_i(&(array)->arr, idx)