diff options
Diffstat (limited to 'src/utils/utilities.c')
-rw-r--r-- | src/utils/utilities.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/utils/utilities.c b/src/utils/utilities.c new file mode 100644 index 0000000..717dce0 --- /dev/null +++ b/src/utils/utilities.c @@ -0,0 +1,68 @@ +#include "utils/utilities.h" +#include <string.h> +#include <time.h> + +bool monotonic(int a, int b, int c); + +// TODO: Handle the case when they are not equal (greater or smaller) +int cmpstr_tillchar(const char *a, const char *b, char a_until, char b_until) +{ + while (*a != 0 && *b != 0 && *a != a_until && *b != b_until) + { + if (*a != *b) + return -1; + a++; + b++; + } + return 0; +} + +static unsigned int random_number(unsigned int max) +{ + return rand() / (RAND_MAX / max); +} + +void shuffle(void *base, size_t nitems, size_t size) +{ + char *c_base = base; + char swap[size]; + for (int i = 0; i < nitems; i++) + { + char *a = c_base + (i * size); + char *b = c_base + (random_number(nitems - 1) * size); + memcpy(swap, a, size); + memcpy(a, b, size); + memcpy(b, swap, size); + } +} + +void init2d(void **array, size_t width, size_t height, size_t size) +{ + char **c_array = (char **)array; + char *start = (char *)array; + for (size_t x = 0; x < width; x++) + c_array[x] = start + (width * sizeof(int *)) + (x * height * size); +} + +size_t sizeof_2d(size_t width, size_t height, size_t size) +{ + return (width * sizeof(char *)) + (width * height * size); +} + +int find_lr_ints(char *text, char **left, char **right) +{ + *left = text; + while (**left != 0 && (**left < '0' || **left > '9')) + (*left)++; + if (**left == 0) + return 0; + + *right = text + strlen(text); + while (**right < '0' || **right > '9') + (*right)--; + + while (**right >= '0' && **right <= '9') + (*right)--; + (*right)++; + return 1; +}
\ No newline at end of file |