#include "arena.h"
#include <assert.h>
#include <stdalign.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
unsigned char *buf = malloc(4096);
struct arena arena;
{
if (!str0) {
assert(false);
}
str0[0] = 'a';
str0[1] = '\0';
assert(strcmp(str0, "a") == 0);
if (!tmp0) {
assert(false);
}
str0 = tmp0;
assert(strcmp(str0, "a") == 0);
strncpy(str0, "ab", sizeof("AA"));
assert(strcmp(str0, "ab") == 0);
if (!str1) {
assert(false);
}
strncpy(str1, "cc", sizeof("AA"));
assert(strcmp(str1, "cc") == 0);
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);
}
struct arena_state arena_state_save(struct arena *arena_ptr)
Save the arena state temporarily.
void arena_state_restore(struct arena_state prev_state)
Restore the arena state.
void * arena_allocate(void *self_, const size_t size)
Get the pointer to a chunk of the arena.
void * arena_allocate_aligned(void *self_, const size_t alignment, const size_t size)
Get the pointer to a chunk of the arena. With specific alignment.
void arena_init(void *self_, const size_t len, unsigned char *backing_buf)
Initialize the arena.
void * arena_reallocate_aligned(void *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.
void * arena_reallocate(void *self_, void *old_ptr, const size_t old_size, const size_t new_size)
Reallocate a previously allocated chunk in the arena.
void arena_deallocate_all(void *self_)
Deallocate all allocations in the arena.