aboutsummaryrefslogtreecommitdiff
path: root/src/utilities.c
blob: 1142ec4609087368b88e91fcccb67c8803618e23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "utilities.h"
#include <string.h>
#include <time.h>

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);
}

/*
 * Find left and right ints.
 */
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;
}