aboutsummaryrefslogtreecommitdiff
path: root/array.h
diff options
context:
space:
mode:
authorRiley Beckett <rbeckettvt@gmail.com>2025-10-14 18:15:38 -0400
committerRiley Beckett <rbeckettvt@gmail.com>2025-10-14 18:15:38 -0400
commitce56d992214dfe793186f614d1759cd2ba061ad4 (patch)
tree4fb17ff29ad8c4775566b5f6fb30f9233f1ed521 /array.h
parente4fbb2ea4c344845093ab650178011e319b52b89 (diff)
allow multiple array_for_all's in one scope without collision
Diffstat (limited to 'array.h')
-rw-r--r--array.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/array.h b/array.h
index bf0bfe8..3c410e2 100644
--- a/array.h
+++ b/array.h
@@ -13,6 +13,8 @@ void array_print(void* array);
void array_pop(void* array);
void* array_add_(void* array, size_t item_size);
+#define CONCAT_INNER(a, b) a ## b
+#define CONCAT(a, b) CONCAT_INNER(a, b)
#define array_clear(array) (((array_info*)(array))[-1].size = 0)
#define array_size(array) (((array_info*)(array))[-1].size)
@@ -31,8 +33,8 @@ void* array_add_(void* array, size_t item_size);
#define array_last(array) (array)[array_size(array) - 1]
-#define array_for_all(type__, it__, array__) \
-type__* it__ = array__; type__* end__ = array__ ? array__ + array_size(array__) : NULL; \
-for (; it__ < end__; it__++)
+#define array_for_all(type__, name__, array__) \
+type__* CONCAT(it__, __LINE__) = array__; type__* CONCAT(end__, __LINE__) = array__ ? array__ + array_size(array__) : NULL; \
+for (type__* name__; (CONCAT(it__, __LINE__) < CONCAT(end__, __LINE__)) ? (name__ = CONCAT(it__, __LINE__), true) : false; CONCAT(it__, __LINE__)++)
#endif // ARRAY_H_