topaz/core/arena.c

41 lines
656 B
C

/* SPDX-License-Identifier:BSD-3-Clause */
#include "arena.h"
#include "log.h"
#include <stdlib.h>
arena arena_init(usize size)
{
return (arena){
.capacity = size,
.position = 0,
.memory = malloc(size),
};
}
void *arena_alloc(arena *a, usize size)
{
if (a->position + size > a->capacity) return NULL;
void *ret = (void *)((usize)a->memory + (usize)a->position);
a->position += size;
return ret;
}
snapshot arena_snapshot(arena a)
{
return a.position;
}
void arena_reset_to_snapshot(arena *a, snapshot s)
{
a->position = s;
}
void arena_reset(arena *a)
{
arena_reset_to_snapshot(a, 0);
}
void arena_deinit(arena a)
{
free(a.memory);
}