Added dependency-injected shuffle function
This commit is contained in:
+10
-1
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user