1
0
Fork 0
arena-allocator/src/arena.h

40 lines
925 B
C
Raw Normal View History

#ifndef ARENA_H
#define ARENA_H
2024-04-25 17:34:00 +00:00
#define ARENA_INITIAL_COMMIT_SIZE sizeof(struct Arena)
#ifndef ARENA_DEFAULT_RESERVE_SIZE
# define ARENA_DEFAULT_RESERVE_SIZE KB(4)
#endif // ARENA_DEFAULT_RESERVE_SIZE
typedef struct Arena Arena;
struct Arena {
2024-04-25 17:34:00 +00:00
struct Arena *current;
struct Arena *prev;
u64 *backing_buffer;
u64 base_pos;
u64 commit_pos;
u64 size;
2024-04-25 17:34:00 +00:00
b8 growable;
};
2024-04-25 17:34:00 +00:00
STATIC_ASSERT(ARENA_INITIAL_COMMIT_SIZE <= ARENA_DEFAULT_RESERVE_SIZE,
arena_default_allocation_size);
//= rhjr: arenas
2024-04-25 17:34:00 +00:00
internal Arena * arena_initialize(u64 size, b8 growable);
internal Arena * arena_initialize_default();
2024-04-25 17:34:00 +00:00
internal void * arena_allocate(Arena *arena, u64 size);
#define arena_push_array(arena, type, count) \
(type*) arena_allocate((arena), sizeof(type) * (count))
#define arena_push(arena, type) \
(type*) arena_allocate((arena), sizeof(type))
2024-04-25 17:34:00 +00:00
internal void arena_release(Arena *arena);
#endif // ARENA_H