dsa-c
 
Loading...
Searching...
No Matches
arena_example.c

Example of how arena.h header file is used in practice.

#include "arena.h"
#include <stdalign.h>
#include <stddef.h>
#include <string.h>
int main(void)
{
unsigned char *buf = malloc(4096);
struct arena arena;
arena_init(&arena, 4096, buf);
{
char *str0 = arena_allocate_aligned(&arena, alignof(char), sizeof("A"));
if (!str0) {
assert(false);
}
str0[0] = 'a';
str0[1] = '\0';
assert(strcmp(str0, "a") == 0);
void *tmp0 = arena_reallocate_aligned(&arena, str0, alignof(char), sizeof("A"), sizeof("AA"));
if (!tmp0) {
assert(false);
}
str0 = tmp0;
assert(strcmp(str0, "a") == 0);
strncpy(str0, "ab", sizeof("AA"));
assert(strcmp(str0, "ab") == 0);
char *str1 = arena_allocate(&arena, sizeof("cc"));
if (!str1) {
assert(false);
}
strncpy(str1, "cc", sizeof("AA"));
assert(strcmp(str1, "cc") == 0);
void *tmp1 = arena_reallocate(&arena, str0, sizeof("AA"), sizeof("AAAA"));
if (!tmp1) {
assert(false);
}
str0 = tmp1;
assert(strcmp(str0, "ab") == 0);
strncpy(str0, "abab", sizeof("AAAA"));
assert(strcmp(str0, "abab") == 0);
assert(strcmp(str1, "cc") == 0);
assert(strcmp((char *)buf, "ab") == 0);
assert(arena.curr_offset != 0);
}
assert(arena.curr_offset == 0);
free(buf);
}
void * arena_reallocate_aligned(arena_type *self, void *old_ptr_, const size_t alignment, const size_t old_size, const size_t new_size)
Reallocate a previously allocated chunk in the arena. With specific aligment.
Definition arena_template.h:312
void * arena_allocate_aligned(arena_type *self, const size_t alignment, const size_t size)
Get the pointer to a chunk of the arena. With specific alignment.
Definition arena_template.h:261
void arena_deallocate_all(arena_type *self)
Deallocate all allocations in the arena.
Definition arena_template.h:253
arena_state_type arena_state_save(arena_type *arena_ptr)
Save the arena state temporarily.
Definition arena_template.h:223
void * arena_reallocate(arena_type *self, void *old_ptr, const size_t old_size, const size_t new_size)
Reallocate a previously allocated chunk in the arena.
Definition arena_template.h:341
void arena_init(arena_type *self, const size_t len, unsigned char *backing_buf)
Initialize the arena.
Definition arena_template.h:238
void * arena_allocate(arena_type *self, const size_t size)
Get the pointer to a chunk of the arena.
Definition arena_template.h:284
void arena_state_restore(arena_state_type prev_state)
Restore the arena state.
Definition arena_template.h:232
Tempory arena state struct.
Definition arena_template.h:114
Arena data struct.
Definition arena_template.h:104
size_t curr_offset
Current offset relative to buf_ptr.
Definition arena_template.h:107