summaryrefslogtreecommitdiffstats
path: root/wv_mem.h
blob: 4b914ef93d56a9b573ed442d641345ec74c7d7d2 (plain)
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
#ifndef WV_MEM_H
#define WV_MEM_H

#include <stddef.h>
#include <stdint.h>

/* Relative offset into the arena */
typedef uint32_t wv_ref;

/* Resolve a ref into a memory address */
#define WV_ADDR(arena, ref) ((void *)((arena)->buf + (ref)))

struct wv_arena {
	size_t size;
	size_t offset;
	unsigned char *buf;
};

struct wv_arena *wv_arena_create(size_t n);
wv_ref wv_arena_alloc(struct wv_arena *arena, size_t n);
void wv_arena_reset(struct wv_arena *arena);
void wv_arena_destroy(struct wv_arena *arena);

wv_ref wv_arena_push_string(struct wv_arena *arena, const char *src, 
	size_t len);

#endif /* WV_MEM_H */