diff options
Diffstat (limited to 'arena.h')
-rw-r--r-- | arena.h | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/arena.h b/arena.h deleted file mode 100644 index f3d21d7..0000000 --- a/arena.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef ARENA_H -#define ARENA_H - -#include <sys/mman.h> -#include <stdint.h> -#include "types.h" - -// Arena Allocator -typedef struct { - void* addr; - u64 size; - u64 pos; -} Arena; -#define PushArray(arena, type, count) (type*)ArenaPush((arena), sizeof(type) * (count)) -#define PushArrayZero(arena, type, count) (type*)ArenaPushZero((arena), sizeof(type) * (count)) -#define PushStruct(arena, type) PushArray((arena), (type), 1) -#define PushStructZero(arena, type) PushArrayZero((arena), (type), 1) - -void ArenaAlloc(Arena* arena, u64 size); -void ArenaRelease(Arena* arena); -void* ArenaPush(Arena* arena, u64 size); - -#endif // ARENA_H - -#ifdef ARENA_IMPL - -// Returns arena in case of success, or 0 if it failed to alllocate the memory -void -ArenaAlloc(Arena* arena, u64 size) -{ - arena->addr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); - Assert(arena->addr != MAP_FAILED); - arena->pos = 0; - arena->size = size; -} - -void -ArenaRelease(Arena* arena) -{ - munmap(arena->addr, arena->size); -} - -void* -ArenaPush(Arena* arena, u64 size) -{ - u8* mem; - mem = (u8*)arena->addr + arena->pos; - arena->pos += size; - Assert(arena->pos <= arena->size); - return mem; -} - -#endif // ARENA_IMPL |