added find_start method

This commit is contained in:
2026-08-18 09:59:59 -05:00
parent a1862f54c1
commit 7395915e2d
3 changed files with 16 additions and 1 deletions
+8
View File
@@ -176,6 +176,14 @@ void *keke_array_find(KekeArray *array, Test_func test) {
return NULL;
}
void *keke_array_find_start(KekeArray *array, void *start, size_t size) {
for(size_t i = 0; i < array->len; i++) {
void *current = ARRAY_GET(array, i);
if(memcmp(current, start, size) == 0) return current;
}
return NULL;
}
KekeArray *keke_array_filter(KekeArray *array, Test_func test) {
KekeArray *ret = keke_array_alloc(0, array->type_size);
for(size_t i = 0; i < array->len; i++) {
+3
View File
@@ -40,7 +40,10 @@ void keke_array_reverse(KekeArray *array);
typedef bool (*Test_func)(void *, size_t, KekeArray *);
bool keke_array_some(KekeArray *array, Test_func test);
bool keke_array_all(KekeArray *array, Test_func test);
void *keke_array_find_start(KekeArray *array, void *start, size_t size);
void *keke_array_find(KekeArray *array, Test_func test);
KekeArray *keke_array_filter(KekeArray *array, Test_func test);
typedef void (*B_func)(void *, void *);
+5 -1
View File
@@ -22,11 +22,11 @@ void sub4(void *i, size_t, KekeArray *) {
bool heart(void *i, size_t, KekeArray *) {
return *(int *)i < 3;
}
bool lt2(void *i, size_t, KekeArray *) {
return *(int *)i < 2;
}
void add(void *vx, void *vacc) {
int *x = (int *)vx;
int *acc = (int *)vacc;
@@ -126,6 +126,10 @@ int main(void) {
int *l = keke_array_find(array2, lt2);
puts("Expected value:\n1");
printf("%d\n\n", *l);
l = keke_array_find_start(array2, l, sizeof(*l));
puts("Expected value:\n1");
printf("%d\n\n", *l);
j = 0;