diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2024-12-09 13:25:14 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2024-12-09 13:25:14 -0500 |
| commit | 6bde03ec2db8f1d2ac114991f38896abb78a1812 (patch) | |
| tree | 86b8a31377205811079ebf9a09b1302cb083cf12 /pkarr.h | |
| parent | 392a1454de35f60f2db7f509d6a1ea6e1b0b2f50 (diff) | |
pkarr: add pk_arr_find_first_index + tests
Diffstat (limited to 'pkarr.h')
| -rw-r--r-- | pkarr.h | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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 */ |
