#ifndef MEMORY_H #define MEMORY_H #include 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 */