Hawaii Hybrid
Loading...
Searching...
No Matches
arena.h File Reference
#include <stddef.h>
#include <stdint.h>
#include <stdarg.h>
#include <stdio.h>
#include <assert.h>
Include dependency graph for arena.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  Region
struct  Arena
struct  Arena_Mark

Macros

#define ARENA_ASSERT   assert
#define ARENA_BACKEND_LIBC_MALLOC   0
#define ARENA_BACKEND_LINUX_MMAP   1
#define ARENA_BACKEND_WIN32_VIRTUALALLOC   2
#define ARENA_BACKEND_WASM_HEAPBASE   3
#define ARENA_BACKEND   ARENA_BACKEND_LIBC_MALLOC
#define ARENA_REGION_DEFAULT_CAPACITY   (8*1024)
#define ARENA_DA_INIT_CAP   256
#define cast_ptr(...)
#define arena_da_append(a, da, item)
#define arena_da_append_many(a, da, new_items, new_items_count)
#define arena_sb_append_buf   arena_da_append_many
#define arena_sb_append_cstr(a, sb, cstr)
#define arena_sb_append_null(a, sb)

Typedefs

typedef struct Region Region

Functions

Regionnew_region (size_t capacity)
void free_region (Region *r)
void * arena_alloc (Arena *a, size_t size_bytes)
void * arena_realloc (Arena *a, void *oldptr, size_t oldsz, size_t newsz)
char * arena_strdup (Arena *a, const char *cstr)
void * arena_memdup (Arena *a, void *data, size_t size)
void * arena_memcpy (void *dest, const void *src, size_t n)
char * arena_sprintf (Arena *a, const char *format,...)
char * arena_vsprintf (Arena *a, const char *format, va_list args)
Arena_Mark arena_snapshot (Arena *a)
void arena_reset (Arena *a)
void arena_rewind (Arena *a, Arena_Mark m)
void arena_free (Arena *a)
void arena_trim (Arena *a)

Macro Definition Documentation

◆ ARENA_ASSERT

#define ARENA_ASSERT   assert

◆ ARENA_BACKEND

#define ARENA_BACKEND   ARENA_BACKEND_LIBC_MALLOC

◆ ARENA_BACKEND_LIBC_MALLOC

#define ARENA_BACKEND_LIBC_MALLOC   0

◆ ARENA_BACKEND_LINUX_MMAP

#define ARENA_BACKEND_LINUX_MMAP   1

◆ ARENA_BACKEND_WASM_HEAPBASE

#define ARENA_BACKEND_WASM_HEAPBASE   3

◆ ARENA_BACKEND_WIN32_VIRTUALALLOC

#define ARENA_BACKEND_WIN32_VIRTUALALLOC   2

◆ arena_da_append

#define arena_da_append ( a,
da,
item )
Value:
do { \
if ((da)->count >= (da)->capacity) { \
size_t new_capacity = (da)->capacity == 0 ? ARENA_DA_INIT_CAP : (da)->capacity*2; \
(da)->items = cast_ptr((da)->items)arena_realloc( \
(a), (da)->items, \
(da)->capacity*sizeof(*(da)->items), \
new_capacity*sizeof(*(da)->items)); \
(da)->capacity = new_capacity; \
} \
\
(da)->items[(da)->count++] = (item); \
} while (0)
#define cast_ptr(...)
Definition arena.h:95
#define ARENA_DA_INIT_CAP
Definition arena.h:89
void * arena_realloc(Arena *a, void *oldptr, size_t oldsz, size_t newsz)

◆ arena_da_append_many

#define arena_da_append_many ( a,
da,
new_items,
new_items_count )
Value:
do { \
if ((da)->count + (new_items_count) > (da)->capacity) { \
size_t new_capacity = (da)->capacity; \
if (new_capacity == 0) new_capacity = ARENA_DA_INIT_CAP; \
while ((da)->count + (new_items_count) > new_capacity) new_capacity *= 2; \
(da)->items = cast_ptr((da)->items)arena_realloc( \
(a), (da)->items, \
(da)->capacity*sizeof(*(da)->items), \
new_capacity*sizeof(*(da)->items)); \
(da)->capacity = new_capacity; \
} \
arena_memcpy((da)->items + (da)->count, (new_items), (new_items_count)*sizeof(*(da)->items)); \
(da)->count += (new_items_count); \
} while (0)
void * arena_memcpy(void *dest, const void *src, size_t n)

◆ ARENA_DA_INIT_CAP

#define ARENA_DA_INIT_CAP   256

◆ ARENA_REGION_DEFAULT_CAPACITY

#define ARENA_REGION_DEFAULT_CAPACITY   (8*1024)

◆ arena_sb_append_buf

#define arena_sb_append_buf   arena_da_append_many

◆ arena_sb_append_cstr

#define arena_sb_append_cstr ( a,
sb,
cstr )
Value:
do { \
const char *s = (cstr); \
size_t n = arena_strlen(s); \
arena_da_append_many(a, sb, s, n); \
} while (0)

◆ arena_sb_append_null

#define arena_sb_append_null ( a,
sb )
Value:
arena_da_append(a, sb, 0)
#define arena_da_append(a, da, item)
Definition arena.h:98

◆ cast_ptr

#define cast_ptr ( ...)

Typedef Documentation

◆ Region

typedef struct Region Region

Function Documentation

◆ arena_alloc()

void * arena_alloc ( Arena * a,
size_t size_bytes )

◆ arena_free()

void arena_free ( Arena * a)

◆ arena_memcpy()

void * arena_memcpy ( void * dest,
const void * src,
size_t n )

◆ arena_memdup()

void * arena_memdup ( Arena * a,
void * data,
size_t size )

◆ arena_realloc()

void * arena_realloc ( Arena * a,
void * oldptr,
size_t oldsz,
size_t newsz )

◆ arena_reset()

void arena_reset ( Arena * a)

◆ arena_rewind()

void arena_rewind ( Arena * a,
Arena_Mark m )

◆ arena_snapshot()

Arena_Mark arena_snapshot ( Arena * a)

◆ arena_sprintf()

char * arena_sprintf ( Arena * a,
const char * format,
... )

◆ arena_strdup()

char * arena_strdup ( Arena * a,
const char * cstr )

◆ arena_trim()

void arena_trim ( Arena * a)

◆ arena_vsprintf()

char * arena_vsprintf ( Arena * a,
const char * format,
va_list args )

◆ free_region()

void free_region ( Region * r)

◆ new_region()

Region * new_region ( size_t capacity)