diff options
Diffstat (limited to 'std/mem.pry')
| -rw-r--r-- | std/mem.pry | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/std/mem.pry b/std/mem.pry new file mode 100644 index 0000000..75f3d1d --- /dev/null +++ b/std/mem.pry @@ -0,0 +1,29 @@ +extern calloc = (i64, i64) => *void; +extern realloc = (*void, i64) => *void; +extern free = (*void) => void; + +import "!stdlib.pry"; + +let arena = struct { + buf: *void, + offset: i64, +}; + +let arena_init = (size: i64) => *arena { + let a = cast(*arena, calloc(1, sizeof(arena))); + (*a).buf = calloc(1, size); + (*a).offset = 0; + return a; +}; + +let arena_free = (a: *arena) => void { + free((*a).buf); + free(cast(*void, a)); + return; +}; + +let arena_alloc = (a: *arena, size: i64) => *void { + let old_offset = (*a).offset; + (*a).offset = (*a).offset + size; + return cast(*void, cast(*i8, (*a).buf) + cast(*i8, old_offset)); +}; |