From 6bde03ec2db8f1d2ac114991f38896abb78a1812 Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Mon, 9 Dec 2024 13:25:14 -0500 Subject: pkarr: add pk_arr_find_first_index + tests --- pkarr.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'pkarr.h') diff --git a/pkarr.h b/pkarr.h index f92cd9f..3d05e77 100644 --- a/pkarr.h +++ b/pkarr.h @@ -13,6 +13,8 @@ struct pk_arr { void *data; }; +typedef bool(pk_arr_item_compare)(void *user_data, void *item); + void pk_arr_clear(struct pk_arr *arr); void pk_arr_reset(struct pk_arr *arr); void pk_arr_reserve(struct pk_arr *arr, uint32_t count); @@ -20,6 +22,7 @@ void pk_arr_resize(struct pk_arr *arr, uint32_t count); void pk_arr_move_to_back(struct pk_arr *arr, uint32_t index); void pk_arr_append(struct pk_arr *arr, void *data); void pk_arr_remove_at(struct pk_arr *arr, uint32_t index); +uint32_t pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare *fn); #endif /* PK_PKARR_H */ #ifdef PK_IMPL_ARR @@ -154,4 +157,15 @@ pk_arr_remove_at(struct pk_arr *arr, uint32_t index) arr->next -= 1; } +uint32_t +pk_arr_find_first_index(struct pk_arr *arr, void *user_data, pk_arr_item_compare *fn) +{ + uint32_t i; + char *char_data = (char *)arr->data; + for (i = 0; i < arr->next; ++i) { + if (fn(user_data, char_data + (arr->stride * i))) return i; + } + return -1; +} + #endif /* PK_IMPL_ARR */ -- cgit v1.2.3