jrk

my own c stdlib to keep myself sane
git clone git://git.jakekoroman.com/jrk
Log | Files | Refs

commit 0845e6f115d1314d21e7176c79570bcd25707d73
parent 46f176d349f4f10cdf16e808bbafafb59a7842de
Author: Jake Koroman <jake@jakekoroman.com>
Date:   Tue,  2 Sep 2025 11:59:09 -0400

add jrk_tmpstrings api.

Diffstat:
Mjrk.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) {