55 if (
arena ==
nullptr) {
88 while (current !=
nullptr) {
118 if (
arena ==
nullptr)
122 if (alignment == 0 || (alignment & (alignment - 1)) != 0) {
138 uintptr_t aligned_ptr = (current_ptr + (alignment - 1)) & ~(alignment - 1);
141 size_t padding = (size_t)(aligned_ptr - current_ptr);
144 size_t total_needed = size + padding;
148 void * ret = (
void *)aligned_ptr;
161 if (next_cap < size + alignment)
162 next_cap = size + alignment;
190 if (size > 0 && num > SIZE_MAX / size) {
196 size_t total_size = num * size;
199 memset(ptr, 0, total_size);
infix_arena_t * arena
Definition 005_layouts.c:62
#define c23_nodiscard
Internal alias for the public INFIX_NODISCARD macro.
Definition compat_c23.h:91
@ INFIX_CODE_INVALID_ALIGNMENT
Definition infix.h:1353
@ INFIX_CODE_INTEGER_OVERFLOW
Definition infix.h:1360
@ INFIX_CODE_OUT_OF_MEMORY
Definition infix.h:1350
@ INFIX_CATEGORY_ALLOCATION
Definition infix.h:1335
@ INFIX_CATEGORY_GENERAL
Definition infix.h:1334
#define infix_free
A macro that can be defined to override the default free function.
Definition infix.h:382
INFIX_API c23_nodiscard void * infix_arena_alloc(infix_arena_t *arena, size_t size, size_t alignment)
Allocates a block of memory from an arena.
Definition arena.c:117
#define infix_calloc
A macro that can be defined to override the default calloc function.
Definition infix.h:374
INFIX_API c23_nodiscard infix_arena_t * infix_arena_create(size_t initial_size)
Creates a new memory arena.
Definition arena.c:52
INFIX_API c23_nodiscard void * infix_arena_calloc(infix_arena_t *arena, size_t num, size_t size, size_t alignment)
Allocates and zero-initializes a block of memory from an arena.
Definition arena.c:188
INFIX_API void infix_arena_destroy(infix_arena_t *arena)
Destroys an arena and frees all memory allocated from it.
Definition arena.c:83
#define INFIX_API
Symbol visibility macro.
Definition infix.h:114
Internal data structures, function prototypes, and constants.
INFIX_INTERNAL void _infix_set_error(infix_error_category_t category, infix_error_code_t code, size_t position)
Sets the thread-local error state with detailed information.
Definition error.c:173
Internal definition of a memory arena.
Definition infix_internals.h:138
char * buffer
Definition infix_internals.h:139
bool error
Definition infix_internals.h:142
size_t capacity
Definition infix_internals.h:140
size_t block_size
Definition infix_internals.h:144
size_t current_offset
Definition infix_internals.h:141
struct infix_arena_t * next_block
Definition infix_internals.h:143