diff options
author | 3gg <3gg@shellblade.net> | 2025-07-19 09:43:50 -0700 |
---|---|---|
committer | 3gg <3gg@shellblade.net> | 2025-07-19 09:43:50 -0700 |
commit | b905c803f35ee41ed894a108cc8fa114a2a58b88 (patch) | |
tree | f67bb65087208fa85b30011a07e8e23bd8e7ef9a /memstack/src/memstack.c | |
parent | 75705ca3d91930a730743b5319268087fc7bc56e (diff) |
Diffstat (limited to 'memstack/src/memstack.c')
-rw-r--r-- | memstack/src/memstack.c | 16 |
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 | ||
61 | size_t memstack_watermark(const memstack* stack) { | ||
62 | assert(stack); | ||
63 | return stack->watermark - stack->base; | ||
64 | } | ||
65 | |||
66 | void 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 | |||
61 | void* memstack_alloc(memstack* stack, size_t bytes) { | 76 | void* 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); |