Added dependency-injected shuffle function

This commit is contained in:
2026-08-21 01:01:11 -05:00
parent d3aafcbee0
commit 5f92d24de0
5 changed files with 40 additions and 14 deletions
+10 -1
View File
@@ -22,7 +22,7 @@ typedef struct {
KekeArray *keke_array_alloc(size_t initial_len, size_t type_size) {
KekeArray *array = malloc(sizeof(*array));
array->len = initial_len;
size_t max_len = next_power_of_two(initial_len);
size_t max_len = bit_ceil(initial_len);
array->type_size = type_size;
array->max_len = max_len;
@@ -198,6 +198,15 @@ void keke_array_qsort_header(KekeArray *array, size_t start_header_size) {
qsort_r(array->content, array->len, array->type_size, compar, &start_header_size);
}
typedef int (*Rng_fun)(int);
void keke_array_shuffle(KekeArray *array, Rng_fun rng) {
for(size_t i = 0; i < array->len; ++i) {
size_t j = rng(i + 1);
keke_swap(ARRAY_GET(array, i), ARRAY_GET(array, j), array->type_size);
}
}
// requires pre-sorted arrays
KekeArray *keke_array_merge(KekeArray *a, KekeArray *b) {
if(a->len == 0) {