// Written by retoor@molodetz.nl // This code provides a simple memory arena implementation, which allows dynamic memory allocation within a predefined size. It includes // functions for constructing a new arena, allocating memory within the arena, resetting, and freeing the arena. // The code utilizes rmalloc and rfree for custom memory allocation, which are likely part of another library not defined within the // standard C library. // MIT License #ifndef RARENA_H #define RARENA_H #include "rmalloc.h" #include #include typedef struct arena_t { unsigned char *memory; unsigned int pointer; unsigned int size; } arena_t; arena_t *arena_construct() { arena_t *arena = (arena_t *)rmalloc(sizeof(arena_t)); arena->memory = NULL; arena->pointer = 0; arena->size = 0; return arena; } arena_t *arena_new(size_t size) { arena_t *arena = arena_construct(); arena->memory = (unsigned char *)rmalloc(size); arena->size = size; return arena; } void *arena_alloc(arena_t *arena, size_t size) { if (arena->pointer + size > arena->size) { return NULL; } void *p = arena->memory + arena->pointer; arena->pointer += size; return p; } void arena_free(arena_t *arena) { if (arena->memory) { rfree(arena->memory); } rfree(arena); } void arena_reset(arena_t *arena) { arena->pointer = 0; } #endif