aboutsummaryrefslogtreecommitdiff
path: root/src/utils/utilities.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/utilities.c')
-rw-r--r--src/utils/utilities.c68
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