28 lines
653 B
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;
|
|
}
|