#ifndef __VXGG_REWRITE___ARENA_H___25077218513438___ #define __VXGG_REWRITE___ARENA_H___25077218513438___ #include // Whether to use `XALLOC` or normal `malloc` functions for acquiring new memory in an arena. `> 0` // enables XALLOC functionality #define ___VXGG___USE_XALLOC_FOR_ARENAS___ 1 typedef struct arena arena; typedef arena simplearena; #define ISPOWOF2(x) (((x) & ((x) - 1)) == 0) static const size_t MEM_ALIGN_BYTES = (2 * sizeof(void*)); // Hey, the static keyword did something for once! #define MEM_ALIGN(x) ((x) + (((x) & (MEM_ALIGN_BYTES - 1)) != 0) * (MEM_ALIGN_BYTES - ((x) & (MEM_ALIGN_BYTES - 1)))) arena * arena_init(size_t bytes); void* arena_alloc(arena * const arena, size_t bytes); int arena_free(arena **arena); int arena_clear(arena **arena); simplearena * simplearena_init(size_t bytes); void* simplearena_alloc(simplearena * const a, size_t bytes); int simplearena_free(simplearena **a); int simplearena_free(simplearena **a); #endif