From 4dc78789daa4e06571039852fbe9226695e3055c Mon Sep 17 00:00:00 2001 From: Yuxuan Shui Date: Wed, 5 Jun 2024 19:57:51 +0100 Subject: [PATCH] utils/dynarr: add dynarr_find_pod Signed-off-by: Yuxuan Shui --- src/utils/dynarr.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/utils/dynarr.h b/src/utils/dynarr.h index be50443d05..62150d5878 100644 --- a/src/utils/dynarr.h +++ b/src/utils/dynarr.h @@ -169,3 +169,17 @@ static inline void dynarr_remove_swap_impl(size_t size, void *arr, size_t idx) { #define dynarr_foreach(arr, i) for (typeof(arr)(i) = (arr); (i) < dynarr_end(arr); (i)++) #define dynarr_foreach_rev(arr, i) \ for (typeof(arr)(i) = dynarr_end(arr) - 1; (i) >= (arr); (i)--) + +/// Find the index of an element in the array by using trivial comparison, returns -1 if +/// not found. +#define dynarr_find_pod(arr, needle) \ + ({ \ + ptrdiff_t dynarr_find_ret = -1; \ + dynarr_foreach(arr, dynarr_find_i) { \ + if (*dynarr_find_i == (needle)) { \ + dynarr_find_ret = dynarr_find_i - (arr); \ + break; \ + } \ + } \ + dynarr_find_ret; \ + })