From d429602cea56ee72e75b9f0fea372009efc25736 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Wed, 2 Dec 2009 15:35:32 -0600 Subject: [PATCH] Added array_foreach_idx() --HG-- branch : HEAD --- src/lib/array.h | 3 +++ src/lib/test-array.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/lib/array.h b/src/lib/array.h index ebfa3d487f..71ac7279c5 100644 --- a/src/lib/array.h +++ b/src/lib/array.h @@ -77,6 +77,9 @@ (elem)++) #endif +#define array_foreach_idx(array, elem) \ + ((elem) - (array)->v[0]) + static inline void array_create_from_buffer_i(struct array *array, buffer_t *buffer, size_t element_size) diff --git a/src/lib/test-array.c b/src/lib/test-array.c index 419e35dc28..f63a4a232e 100644 --- a/src/lib/test-array.c +++ b/src/lib/test-array.c @@ -3,6 +3,33 @@ #include "test-lib.h" #include "array.h" +struct foo { + unsigned int a, b, c; +}; + +static void test_array_foreach(void) +{ + ARRAY_DEFINE(foos, struct foo); + const struct foo *foo; + struct foo nfoo; + unsigned int i; + + test_begin("array foreach"); + t_array_init(&foos, 32); + for (i = 0; i < 10; i++) { + nfoo.a = nfoo.b = nfoo.c = i; + array_append(&foos, &nfoo, 1); + } + + array_foreach(&foos, foo) { + i = array_foreach_idx(&foos, foo); + test_assert(foo->a == i); + test_assert(foo->b == i); + test_assert(foo->c == i); + } + test_end(); +} + static void test_array_reverse(void) { ARRAY_DEFINE(intarr, int); @@ -26,5 +53,6 @@ static void test_array_reverse(void) void test_array(void) { + test_array_foreach(); test_array_reverse(); } -- 2.47.3