#ifndef LIBKEKE_ARRAY #define LIBKEKE_ARRAY #include #include #include typedef struct { size_t type_size; size_t len; size_t max_len; void *content; } KekeArray; KekeArray *keke_array_alloc(size_t initial_len, size_t type_size); void keke_array_free(KekeArray *array); void keke_array_set(KekeArray *array, size_t index, const void *value); void *keke_array_get(KekeArray *array, size_t index); int keke_array_copy(KekeArray *array, size_t index, void *value); void keke_array_set_len(KekeArray *array, size_t new_len); void keke_array_insert(KekeArray *array, size_t index, const void *value); void keke_array_remove(KekeArray *array, size_t index, void *value); void keke_array_push(KekeArray *array, const void *value); void keke_array_pop(KekeArray *array, void *value); void keke_array_delete(KekeArray *array, size_t index); KekeArray *keke_array_yoink(KekeArray *array, size_t start_index, size_t len); int keke_array_insert_data(KekeArray *array, size_t index, void *data, size_t len); int keke_array_plop(KekeArray *array, size_t index, KekeArray *array2); typedef void (*Foreach_func)(void *, size_t, KekeArray *); void keke_array_foreach(KekeArray *array, Foreach_func callback); KekeArray *keke_array_clone(KekeArray *array); void keke_array_fill(KekeArray *array, const void *value); void keke_array_reverse(KekeArray *array); void keke_array_qsort(KekeArray *array); void keke_array_qsort_header(KekeArray *array, size_t start_header_size); KekeArray *keke_array_merge(KekeArray *a, KekeArray *b); KekeArray *keke_array_merge_by_header(KekeArray *a, KekeArray *b, size_t start_header_size); typedef int (*Rng_fun)(int); void keke_array_shuffle(KekeArray *array, Rng_fun rng); 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(KekeArray *array, Test_func test); void *keke_array_find_start(KekeArray *array, void *start, size_t size); KekeArray *keke_array_filter(KekeArray *array, Test_func test); typedef void (*B_func)(void *, void *); void keke_array_reduce(KekeArray *array, B_func op, void *acc); #endif