summaryrefslogtreecommitdiffstats
path: root/include/arena.h
blob: fa1674b206bd969561270a293c83e2575b91de80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef VL_ARENA_H_INCLUDED
#define VL_ARENA_H_INCLUDED

/* implements a basic arena allocator */

#include <stddef.h>
#include <stdarg.h>

typedef struct vl__arena_tag vl_arena;

/* returns NULL if an arena could not be allocated */
vl_arena *vl_arena_new(size_t cap);

/* aborts if the arena is overflowing */
void *vl_arena_push(vl_arena *parena, size_t len);

/* resets the arena (but does not free it) */
void vl_arena_reset(vl_arena *parena);

/* frees the arena */
void vl_arena_free(vl_arena *parena);

char *vl_arena_strdup(vl_arena *parena, const char *str);

char *vl_arena_sprintf(vl_arena *parena, const char *fmt, ...);
char *vl_arena_vsprintf(vl_arena *parena, const char *fmt, va_list ap);

#endif /* include guard */