#ifndef ARENA_INCLUDED #define ARENA_INCLUDED struct Arena { unsigned char *beg; unsigned char *end; }; typedef struct Arena Arena; extern void *arena_alloc(int flags, struct Arena *a, size_t nbytes, size_t align, size_t count, const char *file, int line); extern struct Arena arena_new(int flags, size_t cap, const char *file, int line); extern void arena_back(struct Arena *a, void *buf, size_t len); #define ARENA(flags, cap) arena_new((flags), (cap), __FILE__, __LINE__) #define ARENA_BACK(a, buf, len) arena_back((a), (buf), (len)) #define ARENA_ALLOC(flags, a, nbytes, align, count) \ arena_alloc((flags), (a), (nbytes), (align), (count), __FILE__, __LINE__) #endif