commit 15f1d8efe1195049ae3edfd1699db2a695ccadb8
parent 171444e442f450ebc1964da0cba6dec59d759f0f
Author: Jake Koroman <jake@jakekoroman.com>
Date: Wed, 23 Jul 2025 10:43:49 -0400
add jrk_ecalloc and jrk_erealloc.
Diffstat:
M | jrk.h | | | 42 | +++++++++++++++++++++++++++++++++--------- |
1 file changed, 33 insertions(+), 9 deletions(-)
diff --git a/jrk.h b/jrk.h
@@ -40,6 +40,9 @@ typedef struct {
u64 length;
} jrk_string;
+void *jrk_ecalloc(u64, u64);
+void *jrk_erealloc(void*, u64);
+
void *jrk_arrgrow(void*, u64, u64, u64);
jrk_arena jrk_arena_create(u64);
@@ -51,8 +54,8 @@ jrk_string jrk_strchop_delim(char*, char, u64);
void jrk_strput(jrk_string);
void jrk_strputn(jrk_string, u64);
-static inline i32 jrk_rand_num(i32);
-static inline i32 jrk_rand_num_range(i32, i32);
+i32 jrk_rand_num(i32);
+i32 jrk_rand_num_range(i32, i32);
#define jrk_arrsetcap(arr,n) ((arr) = jrk_arrgrow(arr,0,sizeof(typeof(*arr)),n))
#define jrk_arr_header(arr) ((jrk_array_header *) (arr) - 1)
@@ -73,6 +76,9 @@ static inline i32 jrk_rand_num_range(i32, i32);
delim, n)
#ifdef JRK_SHORTNAMES
+#define ecalloc jrk_ecalloc
+#define erealloc jrk_erealloc
+
#define arrput jrk_arrput
#define arrlen jrk_arrlen
#define arrcap jrk_arrcap
@@ -100,6 +106,7 @@ static inline i32 jrk_rand_num_range(i32, i32);
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#define jrk_die(x) do { fprintf(stderr, "%s:%d: error: "x"\n", __FILE__, __LINE__); exit(69); } while(0)
#define jrk_edie(x) do { fprintf(stderr, "%s:%d: error: "x": %s\n", __FILE__, __LINE__, strerror(errno)); exit(69); } while(0)
@@ -110,6 +117,26 @@ static inline i32 jrk_rand_num_range(i32, i32);
#endif // JRK_SHORTNAMES
void *
+jrk_ecalloc(u64 nmemb, u64 size)
+{
+ void *p;
+
+ if (!(p = calloc(nmemb, size)))
+ jrk_edie("jrk_ecalloc");
+ return p;
+}
+
+void *
+jrk_erealloc(void *ptr, u64 size)
+{
+ void *p;
+
+ if (!(p = realloc(ptr, size)))
+ edie("jrk_erealloc");
+ return p;
+}
+
+void *
jrk_arrgrow(void *arr, u64 addlen, u64 elemsize, u64 min_cap)
{
u64 min_len = jrk_arrlen(arr) + addlen;
@@ -125,7 +152,7 @@ jrk_arrgrow(void *arr, u64 addlen, u64 elemsize, u64 min_cap)
else if (min_cap < 4)
min_cap = 4;
- void *temp = realloc(arr ? jrk_arr_header(arr) : NULL, elemsize * min_cap + sizeof(jrk_array_header));
+ void *temp = jrk_erealloc(arr ? jrk_arr_header(arr) : NULL, elemsize * min_cap + sizeof(jrk_array_header));
temp = (jrk_array_header *) temp + 1;
if (arr == NULL)
@@ -159,10 +186,7 @@ jrk__arena_push(jrk_arena *arena, u64 n)
void
jrk_arena_expand(jrk_arena *arena, u64 new_capacity)
{
- u8 *tmp = realloc(arena->data, new_capacity);
-
- if (!tmp)
- jrk_die("buy more ram lol");
+ u8 *tmp = jrk_erealloc(arena->data, new_capacity);
arena->capacity = new_capacity;
arena->data = tmp;
@@ -203,13 +227,13 @@ jrk_strputn(jrk_string string, u64 n)
printf("%*.*s\n", (int) n, (int) n, string.data);
}
-static inline i32
+i32
jrk_rand_num(i32 upbound)
{
return rand() % upbound + 1;
}
-static inline i32
+i32
jrk_rand_num_range(i32 min, i32 max)
{
return rand() % (max - min + 1) + min;