From f6d3090f7fa76eb8e0dbe060b8490cb49c001c39 Mon Sep 17 00:00:00 2001 From: nasr Date: Mon, 5 Oct 2026 22:02:56 +0200 Subject: init: base --- source/base/base_stack.h | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 source/base/base_stack.h (limited to 'source/base/base_stack.h') 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 @@ +#ifndef BASE_STACK_H +#define BASE_STACK_H + +#if defined(PLATFORM_UNIX) +#define StackCreate(size) unix_stack_create(size) +#define StackDestroy(stack) unix_stack_destroy(stack) +#elif defined(PLATFORM_WINDOWS) +#define StackCreate(size) win32_stack_create(size) +#define StackDestroy(stack) win32_stack_destroy(stack) +#endif + +//- + +typedef struct MemStackHeader MemStackHeader; +typedef struct MemStack MemStack; + +struct MemStackHeader { + u8 padding; + u8 previous_offset; +}; + +struct MemStack { + MemStackHeader *header; + u64 current_offset; + u64 capacity; + u8 *base_position; // TODO: why is this a (u8 *)? +}; + +//- + +internal MemStack *stack_push_align(MemStack *stack, u64 size, u8 alignment); +internal MemStack *stack_resize_align(MemStack *stack, void *pointer, u64 old_size, u64 new_size, + u8 alignment); +internal void *stack_push(MemStack *stack, u64 size); +internal void stack_pop(MemStack *stack, void *pointer); +internal void stack_clear(MemStack *stack); +internal u8 calculate_padding(u64 pointer, u8 alignment, u64 header_size); +internal MemStack *arena_to_stack(MemArena *arena, u64 size, u64 alignment); + + +#define ArenaToStack(arena, size) arena_to_stack(arena, size); +#define StackPushStruct(stack, type) (type *)stack_push((stack), sizeof(type)) +#define StackPushArray(stack, type, len) (type *)stack_push((stack), sizeof(type) * (len)) +#define StackPop(stack, pointer) stack_pop(stack, pointer) +#define StackClear(stack) stack_clear(stack) + +#endif // BASE_STACK_H -- cgit v1.3.1