32 lines
757 B
C
32 lines
757 B
C
// retoor <retoor@molodetz.nl>
|
|||
|
|
|
||
|
|
#ifndef R_MEMORY_H
|
||
|
|
#define R_MEMORY_H
|
||
|
|
|
||
|
|
#include <stddef.h>
|
||
|
|
|
||
|
|
typedef struct arena_t {
|
||
|
|
char *current_block;
|
||
|
|
size_t block_size;
|
||
|
|
size_t block_used;
|
||
|
|
size_t block_count;
|
||
|
|
struct arena_block *blocks;
|
||
|
|
} arena_t;
|
||
|
|
|
||
|
|
typedef struct arena_block {
|
||
|
|
char *data;
|
||
|
|
size_t size;
|
||
|
|
struct arena_block *next;
|
||
|
|
} arena_block_t;
|
||
|
|
|
||
|
|
arena_t *arena_create(size_t chunk_size);
|
||
|
|
void *arena_alloc(arena_t *arena, size_t size);
|
||
|
|
char *arena_strdup(arena_t *arena, const char *str);
|
||
|
|
void arena_reset(arena_t *arena);
|
||
|
|
void arena_destroy(arena_t *arena);
|
||
|
|
|
||
|
|
#define ARENA_ALLOC(arena, type) ((type *)arena_alloc(arena, sizeof(type)))
|
||
|
|
#define ARENA_ARRAY(arena, type, count) ((type *)arena_alloc(arena, sizeof(type) * (count)))
|
||
|
|
|
||
|
|
#endif
|