summaryrefslogtreecommitdiff
path: root/pkarr.h
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2024-12-09 13:25:14 -0500
committerJonathan Bradley <jcb@pikum.xyz>2024-12-09 13:25:14 -0500
commit6bde03ec2db8f1d2ac114991f38896abb78a1812 (patch)
tree86b8a31377205811079ebf9a09b1302cb083cf12 /pkarr.h
parent392a1454de35f60f2db7f509d6a1ea6e1b0b2f50 (diff)
pkarr: add pk_arr_find_first_index + tests
Diffstat (limited to 'pkarr.h')
-rw-r--r--pkarr.h14
1 files changed, 14 insertions, 0 deletions
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 */