new-engine/src/arena_allocator.c

28 lines
653 B
C

#include "arena_allocator.h"
#include <assert.h>
#include <math.h>
#include <stddef.h>
#include <stdlib.h>
Arena arena_init(size_t capacity) {
Arena result = {.capacity = capacity, .size = 0, .data = malloc(capacity)};
assert(result.data != NULL);
return result;
}
void arena_deinit(Arena *arena) {
free(arena->data);
*arena = (Arena){.capacity = NAN, .size = 0, .data = NULL};
}
void *arena_alloc(Arena *arena, size_t size) {
assert(arena->size + size <= arena->capacity);
void *result = &arena->data[arena->size];
arena->size += size;
return result;
}
void *arena_clear(Arena *arena) {
arena->size = 0;
return arena->data;
}