diff options
Diffstat (limited to 'src/util.c')
| -rw-r--r-- | src/util.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..83f265b --- /dev/null +++ b/src/util.c @@ -0,0 +1,40 @@ +#include "util.h" + +#include <linux/random.h> + +void +random_perm(uint32_t *arr, uint32_t arr_len) +{ + uint32_t i, idx, tmp; + + for (i = arr_len - 1; i > 0; --i) { + get_random_bytes(&idx, 4); + idx = idx % i; + + tmp = arr[idx]; + arr[i] = arr[idx]; + arr[idx] = tmp; + } +} + +void +gen_random_indices(uint32_t *arr, uint32_t arr_len) +{ + uint32_t i; + + for (i = 0; i < arr_len; ++i) + arr[i] = i; + random_perm(arr, arr_len); +} + + +bool is_in_arr(uint32_t elem, uint32_t *arr, uint32_t arr_len) { + uint32_t i; + + for (i = 0; i < arr_len; ++i) { + if (arr[i] == elem) + return true; + } + + return false; +} |
