commit 0845e6f115d1314d21e7176c79570bcd25707d73
parent 46f176d349f4f10cdf16e808bbafafb59a7842de
Author: Jake Koroman <jake@jakekoroman.com>
Date: Tue, 2 Sep 2025 11:59:09 -0400
add jrk_tmpstrings api.
Diffstat:
M | jrk.h | | | 37 | +++++++++++++++++++++++++++++++++++++ |
1 file changed, 37 insertions(+), 0 deletions(-)
diff --git a/jrk.h b/jrk.h
@@ -29,6 +29,9 @@ typedef double f64;
#define JRK_UNUSED(x) (void)x
#define JRK_ARRSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
+#define JRK_TMPSTRINGS_ARR_CAPACITY 4
+#define JRK_TMPSTRINGS_STR_CAPACITY 1024
+
typedef struct {
u8 *data;
u64 count;
@@ -76,6 +79,9 @@ jrk_StringView jrk_sv_trim(jrk_StringView);
jrk_StringView jrk_sv_from_cstr(char*);
jrk_StringView jrk_sv_chop_delim(jrk_StringView*, char delim);
+char *jrk_tmpstrings_push(char *);
+char *jrk_tmpstrings_pushf(char *, ...);
+
/* XXX: im not thrilled with this api, the memory can get messy real fast */
#define jrk_sv_chop_delim_loop(sv, it, delim) \
for (jrk_StringView it = jrk_sv_chop_delim(sv, delim); it.count != 0; it = jrk_sv_chop_delim(sv, delim))
@@ -158,6 +164,9 @@ jrk_StringView jrk_sv_chop_delim(jrk_StringView*, char delim);
#define StringBuilder jrk_StringBuilder
#define StringView jrk_StringView
+ #define tmpstrings_push jrk_tmpstrings_push
+ #define tmpstrings_pushf jrk_tmpstrings_pushf
+
#define sb_appendf jrk_sb_appendf
#define sb_append_null jrk_sb_append_null
#define sb_append_buf jrk_sb_append_buf
@@ -259,6 +268,34 @@ jrk_erealloc(void *ptr, u64 size)
return p;
}
+// NOTE: only allocate space for translation units with JRK_IMPLEMENTATION
+static char jrk__tmpstrings[JRK_TMPSTRINGS_ARR_CAPACITY][JRK_TMPSTRINGS_STR_CAPACITY];
+static u32 jrk__tmpstrings_idx = 0;
+
+char *
+jrk_tmpstrings_push(char *str)
+{
+ char *result;
+ result = jrk_tmpstrings_pushf(str);
+ return result;
+}
+
+char *
+jrk_tmpstrings_pushf(char *fmt, ...)
+{
+ char *result = jrk__tmpstrings[jrk__tmpstrings_idx];
+
+ va_list args;
+ va_start(args, fmt);
+ vsnprintf(result, JRK_TMPSTRINGS_STR_CAPACITY, fmt, args);
+ va_end(args);
+
+ if (++jrk__tmpstrings_idx >= JRK_TMPSTRINGS_ARR_CAPACITY)
+ jrk__tmpstrings_idx = 0;
+
+ return result;
+}
+
jrk_Arena
jrk_arena_create(u64 n)
{