commit 28dfbe162b48059c1b3ad99b0c56fb2d9100e8cf
parent 0a62235e16263adfe0be3a90c578a50e3277ed9b
Author: Jake Koroman <jake@jakekoroman.com>
Date: Tue, 9 Sep 2025 19:31:59 -0400
add jrk_return_defer and remove assert from jrk_da_free.
Diffstat:
M | jrk.h | | | 23 | ++++++++++++++++++----- |
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/jrk.h b/jrk.h
@@ -6,6 +6,7 @@
* must be a better way of handling things.
*/
+#include <stdbool.h>
#include <stdint.h>
#ifdef JRK_IMPLEMENTATION_WITH_SHORTNAMES
@@ -29,8 +30,15 @@ typedef double f64;
#define JRK_UNUSED(x) (void)x
#define JRK_ARRSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
+#define jrk_return_defer(value) \
+ do { result = value; goto defer; } while(0)
+
+#define JRK_KILOBYTES(x) ((u64)x*1024)
+#define JRK_MEGABYTES(x) (JRK_KILOBYTES((u64)x*1024))
+#define JRK_GIGABYTES(x) (JRK_MEGABYTES((u64)x*1024))
+
#define JRK_TMPSTRINGS_ARR_CAPACITY 4
-#define JRK_TMPSTRINGS_STR_CAPACITY 1024
+#define JRK_TMPSTRINGS_STR_CAPACITY JRK_KILOBYTES(1)
typedef struct {
u8 *data;
@@ -135,10 +143,10 @@ char *jrk_tmpstrings_pushf(char *, ...);
}; \
typedef struct name name
-#define jrk_da_free(da) \
- do { \
- jrk_assert((da).items, "bad free: jrk_da_free da.items is NULL"); \
- free((da).items); \
+#define jrk_da_free(da) \
+ do { \
+ if ((da).items) \
+ free((da).items); \
} while (0)
#define jrk_da_foreach(type,it,da) for (type *it = (da)->items; it < (da)->items + (da)->count; ++it)
@@ -158,6 +166,11 @@ char *jrk_tmpstrings_pushf(char *, ...);
#ifdef JRK_SHORTNAMES
#define UNUSED JRK_UNUSED
#define ARRSIZE JRK_ARRSIZE
+ #define KILOBYTES JRK_KILOBYTES
+ #define MEGABYTES JRK_MEGABYTES
+ #define GIGABYTES JRK_GIGABYTES
+
+ #define return_defer jrk_return_defer
#define Arena jrk_Arena
#define StringBuilder jrk_StringBuilder