summaryrefslogtreecommitdiff
path: root/archive/Podium/p_allocators.h
diff options
context:
space:
mode:
authorVasco <[email protected]>2026-08-24 00:56:24 +0100
committerVasco <[email protected]>2026-08-24 00:56:24 +0100
commit5dc2716abd43166cd65133625f408ad36a6623b3 (patch)
tree19d89b838206b6bb11cc0b9f88311d855999d447 /archive/Podium/p_allocators.h
parentdc96fcd771bea09d726a760266739906e95c09a6 (diff)
Peak 0.4.0 and Draw
Diffstat (limited to 'archive/Podium/p_allocators.h')
-rw-r--r--archive/Podium/p_allocators.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/archive/Podium/p_allocators.h b/archive/Podium/p_allocators.h
new file mode 100644
index 0000000..72bae56
--- /dev/null
+++ b/archive/Podium/p_allocators.h
@@ -0,0 +1,44 @@
+typedef struct Arena {
+ unsigned char *buf;
+ usize buf_len;
+ usize curr_offset;
+ usize prev_offset;
+} Arena;
+
+PODEF void p_arena_create(Arena *a, void *backing_buffer, usize backing_buffer_length);
+PODEF void* p_arena_alloc_align(Arena *a, usize s, usize align);
+PODEF void* p_arena_alloc(Arena *a, usize s);
+PODEF void* p_arena_resize_align(Arena *a, void *old_memory, usize old_size, usize new_size, usize align);
+PODEF void* p_arena_resize(Arena *a, void *old_memory, usize old_size, usize new_size);
+PODEF void p_arena_free_all(Arena *a);
+PODEF void p_arena_destroy(Arena* a);
+
+typedef struct { u8 padding; } Stack_Allocation_Header;
+typedef struct Stack {
+ unsigned char *buf;
+ usize buf_len;
+ usize offset;
+} Stack;
+
+PODEF void p_stack_create(Stack *s, void *backing_buffer, usize backing_buffer_length);
+PODEF usize calc_padding_with_header(uintptr ptr, uintptr alignment, usize header_size);
+PODEF void* p_stack_alloc(Stack *s, usize len, usize alignment);
+PODEF void p_stack_free(Stack *s, void *ptr);
+PODEF void p_stack_free_all(Stack* s);
+PODEF void p_stack_destroy(Stack* s);
+
+typedef struct Pool_Free_Node Pool_Free_Node;
+
+typedef struct Pool {
+ unsigned char *buf;
+ usize chunk_size;
+ usize pool_size;
+ Pool_Free_Node *head;
+} Pool;
+
+struct Pool_Free_Node { struct Pool_Free_Node *next; };
+PODEF void p_pool_create(Pool *p, void *buf, usize buf_len, usize chunk_size, usize chunk_align);
+PODEF void* p_pool_alloc(Pool *p);
+PODEF void p_pool_free(Pool *p, void *ptr);
+PODEF void p_pool_free_all(Pool *p);
+PODEF void p_pool_destroy(Pool *p);