#ifndef WV_MEM_H #define WV_MEM_H #include #include /* 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 */