2026-05-21 00:31:25 +02:00

44 lines
810 B
C

#include "arena.h"
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
void arena_init(Arena* a)
{
a->data = NULL;
a->size = 0;
a->capacity = 0;
}
void* arena_alloc(Arena* a, size_t size)
{
// simple alignment to 8 bytes
size = (size + 7) & ~((size_t)7);
if (a->size + size > a->capacity) {
size_t new_cap = a->capacity ? a->capacity * 2 : 1024;
while (new_cap < a->size + size)
new_cap *= 2;
uint8_t* new_data = realloc(a->data, new_cap);
if (!new_data)
return NULL;
a->data = new_data;
a->capacity = new_cap;
}
void* ptr = a->data + a->size;
a->size += size;
return ptr;
}
void arena_free(Arena* a)
{
free(a->data);
a->data = NULL;
a->size = 0;
a->capacity = 0;
}