aboutsummaryrefslogtreecommitdiff
path: root/memstack/src
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-07-19 09:43:50 -0700
committer3gg <3gg@shellblade.net>2025-07-19 09:43:50 -0700
commitb905c803f35ee41ed894a108cc8fa114a2a58b88 (patch)
treef67bb65087208fa85b30011a07e8e23bd8e7ef9a /memstack/src
parent75705ca3d91930a730743b5319268087fc7bc56e (diff)
Add functions to get and set the watermarkHEADmain
Diffstat (limited to 'memstack/src')
-rw-r--r--memstack/src/memstack.c16
1 files changed, 16 insertions, 0 deletions
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) {
58 memset(stack->base, 0, stack->capacity); 58 memset(stack->base, 0, stack->capacity);
59} 59}
60 60
61size_t memstack_watermark(const memstack* stack) {
62 assert(stack);
63 return stack->watermark - stack->base;
64}
65
66void memstack_set_watermark(memstack* stack, size_t watermark) {
67 assert(stack);
68 const bool fits = (watermark < stack->capacity);
69 if (stack->trap && !fits) {
70 FAIL("memstack watermark update failed, bad watermark");
71 }
72 assert(fits);
73 stack->watermark = stack->base + watermark;
74}
75
61void* memstack_alloc(memstack* stack, size_t bytes) { 76void* memstack_alloc(memstack* stack, size_t bytes) {
62 assert(stack); 77 assert(stack);
63 78
@@ -82,6 +97,7 @@ void* memstack_alloc_aligned(memstack* stack, size_t bytes, size_t alignment) {
82 uint8_t* const new_watermark = align(stack->watermark, alignment); 97 uint8_t* const new_watermark = align(stack->watermark, alignment);
83 assert(new_watermark >= stack->watermark); 98 assert(new_watermark >= stack->watermark);
84 assert((size_t)(new_watermark - stack->base) <= stack->capacity); 99 assert((size_t)(new_watermark - stack->base) <= stack->capacity);
100 stack->capacity -= (new_watermark - stack->watermark);
85 stack->watermark = new_watermark; 101 stack->watermark = new_watermark;
86 102
87 return memstack_alloc(stack, bytes); 103 return memstack_alloc(stack, bytes);