diff options
author | pryazha <pryadeiniv@mail.ru> | 2025-01-19 17:33:44 +0500 |
---|---|---|
committer | pryazha <pryadeiniv@mail.ru> | 2025-01-19 17:33:44 +0500 |
commit | bd49bd525f4c6c6c15c4142bf42d1dd38be6fc16 (patch) | |
tree | 9e69f473c34b53e9e57d8af1873c39698bf5c80e /libs/pwyazh/memory.h |
initial commit
Diffstat (limited to 'libs/pwyazh/memory.h')
-rw-r--r-- | libs/pwyazh/memory.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libs/pwyazh/memory.h b/libs/pwyazh/memory.h new file mode 100644 index 0000000..6f741b7 --- /dev/null +++ b/libs/pwyazh/memory.h @@ -0,0 +1,41 @@ +#ifndef MEMORY_H +#define MEMORY_H + +#include <stdlib.h> + +Arena * +arena_alloc(U64 capacity) +{ + Arena *result = 0; + result = malloc(sizeof(Arena)); + Assert(result); + result->memory = malloc(capacity); + Assert(result->memory); + result->capacity = capacity; + result->used = 0; + return(result); +} + +void +arena_release(Arena *arena) +{ + free(arena->memory); + arena->memory = 0; + arena->capacity = 0; + arena->used = 0; + free(arena); +} + +void * +arena_push_size(Arena *arena, U64 size) +{ + Assert(arena->used+size <= arena->capacity); + void *result = arena->memory+arena->used; + arena->used += size; + return(result); +} + +#define ArenaPushStruct(arena, element) arena_push_size(arena, sizeof(*(element)) +#define ArenaPushArray(arena, array) arena_push_size(arena, sizeof(array)) + +#endif /* MEMORY_H */ |