12#ifndef PS_INITIAL_ARENA_MMAP
13 #define PS_INITIAL_ARENA_MMAP 0x2000000ULL
42 const char* file,
const char* func,
usize line);
44#if defined(PS_DEBUG) && defined(PS_DEBUG_ARENA)
45 #define arena_alloc(arena, n) \
46 ps_arena_allocate_debug(arena, n, __FILE__, __func__, __LINE__)
47 #define astalloc(n) arena_alloc(PS_ARENA_AST, n)
48 #define iralloc(n) arena_alloc(IR_Arena, n)
50 #define arena_alloc(arena, n) ps_arena_allocate(arena, n)
51 #define astalloc(n) arena_alloc(PS_ARENA_AST, n)
52 #define iralloc(n) arena_alloc(PS_ARENA_IR, n)
63#define ast_strndup(str, len) arena_strndup(PS_ARENA_AST, str, len)
65#define arena_sprintf(arena, fmt, ...) \
68 int length = snprintf(NULL, 0, fmt, __VA_ARGS__); \
70 str = arena_alloc(arena, length + 1); \
72 snprintf(str, length + 1, fmt, __VA_ARGS__); \
77#define ast_sprintf(fmt, ...) arena_sprintf(PS_ARENA_AST, fmt, __VA_ARGS__)
char * arena_strndup(enum ps_arena_domain arena, STR str, usize length)
Duplicates the specified string and produces a null-terminated arena-allocated copy.
void ps_arena_open(enum ps_arena_domain domain)
Initializes the given arena for allocation.
void * ps_arena_allocate_debug(enum ps_arena_domain domain, usize n, const char *file, const char *func, usize line)
void * ps_arena_allocate(enum ps_arena_domain domain, usize n)
Allocates a new object in the given arena.
void ps_arena_close(enum ps_arena_domain domain)
Destroys any allocated objects in the given arena.