summaryrefslogtreecommitdiff
path: root/src/arena.h
blob: a94001b68f12756542e31c0e93830aeeff4aaf7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#ifndef __VXGG_REWRITE___ARENA_H___25077218513438___
#define __VXGG_REWRITE___ARENA_H___25077218513438___

#include <stddef.h>

// 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)
const size_t MEM_ALIGN_BYTES = (2 * sizeof(void*));
#define MEM_ALIGN(x) ((x) + (((x) & (MEM_ALIGN_BYTES - 1)) != 0) * (MEM_ALIGN_BYTES - ((x) & (MEM_ALIGN_BYTES - 1))))

int arena_init(arena **a, size_t bytes);
void* arena_alloc(arena * const arena, size_t bytes);
int arena_free(arena **arena);
int arena_clear(arena **arena);

int simplearena_init(simplearena **a, size_t bytes);
void* simplearena_alloc(simplearena * const a, size_t bytes);
int simplearena_free(simplearena **a);
int simplearena_free(simplearena **a);

#endif