From 7395915e2db2970390f5c6e905ad15e673c85f43 Mon Sep 17 00:00:00 2001 From: Seoxi Ryouko Date: Tue, 18 Aug 2026 09:59:59 -0500 Subject: [PATCH] added find_start method --- libkeke_array.c | 8 ++++++++ libkeke_array.h | 3 +++ test_array.c | 6 +++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libkeke_array.c b/libkeke_array.c index d3fa6e5..cb9c280 100644 --- a/libkeke_array.c +++ b/libkeke_array.c @@ -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++) { diff --git a/libkeke_array.h b/libkeke_array.h index 24e9477..8a66b22 100644 --- a/libkeke_array.h +++ b/libkeke_array.h @@ -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 *); diff --git a/test_array.c b/test_array.c index 9b6b46f..2a7bf42 100644 --- a/test_array.c +++ b/test_array.c @@ -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;