added find, more tests
This commit is contained in:
+9
-3
@@ -19,11 +19,9 @@ typedef struct {
|
||||
#define ARRAY_GET(array, i) ((array)->content + (array)->type_size * (i))
|
||||
|
||||
KekeArray *keke_array_alloc(size_t initial_len, size_t type_size) {
|
||||
//if(initial_len == 0) initial_len = 1;
|
||||
KekeArray *array = malloc(sizeof(*array));
|
||||
array->len = initial_len;
|
||||
size_t max_len = 1;
|
||||
while(initial_len >>= 1) max_len <<= 1;
|
||||
size_t max_len = next_power_of_two(initial_len);
|
||||
|
||||
array->type_size = type_size;
|
||||
array->max_len = max_len;
|
||||
@@ -170,6 +168,14 @@ bool keke_array_all(KekeArray *array, Test_func test) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void *keke_array_find(KekeArray *array, Test_func test) {
|
||||
for(size_t i = 0; i < array->len; i++) {
|
||||
void *current = ARRAY_GET(array, i);
|
||||
if(test(current, i, array)) 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++) {
|
||||
|
||||
Reference in New Issue
Block a user