Mercurial > public > algo-animator
view src/utils.c @ 54:2016dc709c7b default tip
Update typos
author | Dennis C. M. <dennis@denniscm.com> |
---|---|
date | Mon, 02 Jun 2025 19:20:51 +0100 |
parents | 61104b22a25d |
children |
line wrap: on
line source
#include "utils.h" void create_array(struct Element *arr, int arr_size, int window_height, int vpadding) { float rect_increase = (window_height - vpadding * 2) / (float)(arr_size - 1); for (int i = 1; i <= arr_size; i++) { arr[i - 1].value = i * rect_increase; arr[i - 1].current = false; } } void swap_elements(int x, int y, struct Element *arr) { struct Element temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } void randomize_array(struct Element *arr, int arr_size) { srand(time(NULL)); // Fisher-Yates shuffle for (int i = arr_size - 1; i > 0; i--) { int j = rand() % (i + 1); // Swap swap_elements(i, j, arr); } } void algorithm_selector(struct Algo *algos, int size, int direction, int *selected_algo) { int selection = *selected_algo + direction; if (selection >= 0 && selection <= size - 1) { *selected_algo = selection; } } void change_delay(struct AlgoArgs *algo_args, int change) { int new_delay = algo_args->delay + change; if (new_delay) { algo_args->delay = new_delay; } } void control_flow(useconds_t delay, bool sequentially, bool *pause) { if (sequentially) { *pause = true; } while (*pause) { // Wait to resume } usleep(delay); } void reset_state(struct AlgoArgs *algo_args, struct ThreadState *thread_state) { if (thread_state->running) { pthread_cancel(thread_state->thread); } randomize_array(algo_args->arr, algo_args->arr_size); algo_args->comparisons = 0; algo_args->pause = false; algo_args->sequentially = false; for (int i = 0; i < algo_args->arr_size - 1; i++) { algo_args->arr[i].current = false; } } void run(struct AlgoArgs *algo_args, struct Algo *algos, int selected_algo, struct ThreadState *thread_state) { if (algo_args->pause) { algo_args->pause = false; } else { thread_state->running = true; pthread_create(&(thread_state->thread), NULL, algos[selected_algo].function, (void *)algo_args); } }