added find_start method
This commit is contained in:
@@ -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++) {
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user