From b905c803f35ee41ed894a108cc8fa114a2a58b88 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 19 Jul 2025 09:43:50 -0700 Subject: Add functions to get and set the watermark --- memstack/src/memstack.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'memstack/src/memstack.c') diff --git a/memstack/src/memstack.c b/memstack/src/memstack.c index 0848afb..84131ef 100644 --- a/memstack/src/memstack.c +++ b/memstack/src/memstack.c @@ -58,6 +58,21 @@ void memstack_clear(memstack* stack) { memset(stack->base, 0, stack->capacity); } +size_t memstack_watermark(const memstack* stack) { + assert(stack); + return stack->watermark - stack->base; +} + +void memstack_set_watermark(memstack* stack, size_t watermark) { + assert(stack); + const bool fits = (watermark < stack->capacity); + if (stack->trap && !fits) { + FAIL("memstack watermark update failed, bad watermark"); + } + assert(fits); + stack->watermark = stack->base + watermark; +} + void* memstack_alloc(memstack* stack, size_t bytes) { assert(stack); @@ -82,6 +97,7 @@ void* memstack_alloc_aligned(memstack* stack, size_t bytes, size_t alignment) { uint8_t* const new_watermark = align(stack->watermark, alignment); assert(new_watermark >= stack->watermark); assert((size_t)(new_watermark - stack->base) <= stack->capacity); + stack->capacity -= (new_watermark - stack->watermark); stack->watermark = new_watermark; return memstack_alloc(stack, bytes); -- cgit v1.2.3