From 7686aae2667fffd798ee2f0dc7ca1252a36612c5 Mon Sep 17 00:00:00 2001 From: quou Date: Fri, 7 Feb 2025 00:27:11 +1100 Subject: arena pop --- qstd/memory.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'qstd/memory.c') diff --git a/qstd/memory.c b/qstd/memory.c index 7d669d2..87618f9 100644 --- a/qstd/memory.c +++ b/qstd/memory.c @@ -34,10 +34,12 @@ void init_arena( a->buf = mem; a->size = size; a->ptr = 0; + a->last_push = 0; } void clear_arena(Arena* a) { a->ptr = 0; + a->last_push = 0; } void* imp_arena_alloc( @@ -75,6 +77,19 @@ void* arena_alloc_aligned( return (void*)align_address((uintptr_t)p, align); } +void arena_push(Arena* a) { + int last = a->last_push, * prev; + a->last_push = a->ptr; + prev = arena_alloc(a, sizeof *prev); + *prev = last; +} + +void arena_pop(Arena* a) { + assert(a->last_push); + a->ptr -= a->last_push; + a->last_push = *(int*)&a->buf[a->ptr]; +} + void init_heap( Heap* h, void* mem, -- cgit v1.2.3-54-g00ecf