comparison src/utils.c @ 29:dae463bbf5ca

implementing multi-thread and refactoring
author Dennis C. M. <dennis@denniscm.com>
date Wed, 28 Jun 2023 20:10:55 +0100
parents
children f945bcc3571f
comparison
equal deleted inserted replaced
28:99592fae8ea1 29:dae463bbf5ca
1 #include "utils.h"
2
3
4 void create_array(struct Element *arr, int arr_size, int window_height, int vpadding) {
5 float rect_increase = (window_height - vpadding * 2) / (float)(arr_size - 1);
6 for (int i = 1; i <= arr_size; i++) {
7 arr[i - 1].value = i * rect_increase;
8 arr[i - 1].current = false;
9 }
10 }
11
12
13 void swap_elements(int x, int y, struct Element *arr) {
14 struct Element temp = arr[x];
15 arr[x] = arr[y];
16 arr[y] = temp;
17 }
18
19
20 void randomize_array(struct Element *arr, int arr_size) {
21 srand(time(NULL));
22
23 // Fisher-Yates shuffle
24 for (int i = arr_size - 1; i > 0; i--) {
25 int j = rand() % (i + 1);
26
27 // Swap
28 swap_elements(i, j, arr);
29 }
30 }
31
32
33 bool array_sorted(struct Element *arr, int arr_size) {
34 for (int i = 0; i < arr_size - 1; i++) {
35 if (arr[i].value > arr[i + 1].value) {
36 return false;
37 }
38 }
39
40 return true;
41 }
42
43
44 void algorithm_selector(struct Algo *algos, int direction, int *selected_algorithm) {
45 int selection = *selected_algorithm + direction;
46 int lower = 0;
47 int upper = (int)((sizeof(algos) / sizeof(algos[0])) - 1);
48
49 if (selection >= lower && selection <= upper) {
50 *selected_algorithm = selection;
51 }
52 }
53
54
55 void delay_flow(useconds_t *delay, bool *pause) {
56 while (*pause) {
57 // Wait to resume
58 }
59
60 usleep(*delay);
61 }