diff options
| author | fschildt <florian.schildt@protonmail.com> | 2025-08-22 15:23:11 +0200 | 
|---|---|---|
| committer | fschildt <florian.schildt@protonmail.com> | 2025-10-15 11:33:23 +0200 | 
| commit | 04e4627e6c11254ee6f49edf5feb1b8d711da41a (patch) | |
| tree | e28f2e62d3e1b83f9686cdeb102e3f47379e6793 /src/basic/arena.c | |
Diffstat (limited to 'src/basic/arena.c')
| -rw-r--r-- | src/basic/arena.c | 76 | 
1 files changed, 76 insertions, 0 deletions
diff --git a/src/basic/arena.c b/src/basic/arena.c new file mode 100644 index 0000000..8f2e17e --- /dev/null +++ b/src/basic/arena.c @@ -0,0 +1,76 @@ +#include <basic/arena.h> +#include <assert.h> +#include <string.h> +#include <stdlib.h> + +void +arena_init(Arena *arena, u64 size) +{ +    arena->size_used = 0; +    arena->size_max = size; +    arena->memory = malloc(size); +} + +void +arena_deinit(Arena *arena) +{ +    arena->size_used = 0; +    arena->size_max = 0; +    free(arena->memory); +} + +void +arena_align(Arena *arena, u64 alignment) +{ +    // @Incomplete +} + +void* +arena_push(Arena *arena, u64 size) +{ +    void *result = arena->memory + arena->size_used; +    arena->size_used += size; +    assert(arena->size_used <= arena->size_max); +    return result; +} + +void +arena_pop_to(Arena *arena, u64 pos) +{ +    arena->size_used = pos; +} + +void +arena_pop_size(Arena *arena, u64 size) +{ +    arena->size_used -= size; +} + +void +arena_zero(Arena *arena) +{ +    memset(arena->memory, 0, arena->size_used); +} + +void +arena_clear(Arena *arena) +{ +    arena->size_used = 0; +} + + +ArenaTmp +arena_tmp_begin(Arena *arena) +{ +    ArenaTmp tmp; +    tmp.arena = arena; +    tmp.pos = arena->size_used; +    return tmp; +} + +void +arena_tmp_end(ArenaTmp tmp) +{ +    tmp.arena->size_used = tmp.pos; +} +  | 
