commit 0a62235e16263adfe0be3a90c578a50e3277ed9b
parent 0845e6f115d1314d21e7176c79570bcd25707d73
Author: Jake Koroman <jake@jakekoroman.com>
Date: Tue, 2 Sep 2025 15:54:34 -0400
remove jrk_arena_expand.
Wasn't properly implemented. When reallocing all pointers are
invalidated. To properly implement growing I will need to either have
a way of updating all pointers or treating the arena as a linked
list. Pointers could also be indexes into the arena data array but then we
lose pointer syntax.
Not sure the best way to implement this. I don't have a use for
growing arenas at the moment so this is a low priority.
Diffstat:
M | jrk.h | | | 17 | ++++------------- |
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/jrk.h b/jrk.h
@@ -54,7 +54,6 @@ void *jrk_erealloc(void*, u64);
jrk_Arena jrk_arena_create(u64);
void *jrk__arena_push(jrk_Arena*, u64);
-void jrk_arena_expand(jrk_Arena*, u64);
i32 jrk_rand_num(i32);
i32 jrk_rand_num_range(i32, i32);
@@ -201,7 +200,6 @@ char *jrk_tmpstrings_pushf(char *, ...);
#define arena_destroy jrk_arena_destroy
#define arena_push_struct jrk_arena_push_struct
#define arena_push_array jrk_arena_push_array
- #define arena_expand jrk_arena_expand
#define rand_num jrk_rand_num
#define rand_num_range jrk_rand_num_range
@@ -309,23 +307,16 @@ jrk_arena_create(u64 n)
void *
jrk__arena_push(jrk_Arena *arena, u64 n)
{
- while (arena->count + n >= arena->capacity)
- jrk_arena_expand(arena, arena->capacity * 2);
+ jrk_assertv(arena->count + n <= arena->capacity,
+ "jrk__arena_push(%p, %ld): arena push requires %ld bytes but has a capacity of %ld bytes",
+ arena, n, arena->count + n, arena->capacity
+ );
void *result = &arena->data[arena->count];
arena->count += n;
return result;
}
-void
-jrk_arena_expand(jrk_Arena *arena, u64 new_capacity)
-{
- u8 *tmp = jrk_erealloc(arena->data, new_capacity);
-
- arena->capacity = new_capacity;
- arena->data = tmp;
-}
-
i32
jrk_sb_appendf(jrk_StringBuilder *sb, const char *fmt, ...)
{