summaryrefslogtreecommitdiff
path: root/source/base/base_stack.h
diff options
context:
space:
mode:
authornasr <nsrddyn@gmail.com>2026-10-05 22:02:56 +0200
committernasr <nsrddyn@gmail.com>2026-10-05 22:02:56 +0200
commitf6d3090f7fa76eb8e0dbe060b8490cb49c001c39 (patch)
tree433c773997e51f22738acb8b04c4fd2fc6b1bdc9 /source/base/base_stack.h
init: base
Diffstat (limited to 'source/base/base_stack.h')
-rw-r--r--source/base/base_stack.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/source/base/base_stack.h b/source/base/base_stack.h
new file mode 100644
index 0000000..9b69e66
--- /dev/null
+++ b/source/base/base_stack.h
@@ -0,0 +1,47 @@
1#ifndef BASE_STACK_H
2#define BASE_STACK_H
3
4#if defined(PLATFORM_UNIX)
5#define StackCreate(size) unix_stack_create(size)
6#define StackDestroy(stack) unix_stack_destroy(stack)
7#elif defined(PLATFORM_WINDOWS)
8#define StackCreate(size) win32_stack_create(size)
9#define StackDestroy(stack) win32_stack_destroy(stack)
10#endif
11
12//-
13
14typedef struct MemStackHeader MemStackHeader;
15typedef struct MemStack MemStack;
16
17struct MemStackHeader {
18 u8 padding;
19 u8 previous_offset;
20};
21
22struct MemStack {
23 MemStackHeader *header;
24 u64 current_offset;
25 u64 capacity;
26 u8 *base_position; // TODO: why is this a (u8 *)?
27};
28
29//-
30
31internal MemStack *stack_push_align(MemStack *stack, u64 size, u8 alignment);
32internal MemStack *stack_resize_align(MemStack *stack, void *pointer, u64 old_size, u64 new_size,
33 u8 alignment);
34internal void *stack_push(MemStack *stack, u64 size);
35internal void stack_pop(MemStack *stack, void *pointer);
36internal void stack_clear(MemStack *stack);
37internal u8 calculate_padding(u64 pointer, u8 alignment, u64 header_size);
38internal MemStack *arena_to_stack(MemArena *arena, u64 size, u64 alignment);
39
40
41#define ArenaToStack(arena, size) arena_to_stack(arena, size);
42#define StackPushStruct(stack, type) (type *)stack_push((stack), sizeof(type))
43#define StackPushArray(stack, type, len) (type *)stack_push((stack), sizeof(type) * (len))
44#define StackPop(stack, pointer) stack_pop(stack, pointer)
45#define StackClear(stack) stack_clear(stack)
46
47#endif // BASE_STACK_H