diff options
Diffstat (limited to 'src/vec.hff')
| -rw-r--r-- | src/vec.hff | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/vec.hff b/src/vec.hff index be29fec..35a9331 100644 --- a/src/vec.hff +++ b/src/vec.hff @@ -22,8 +22,7 @@ struct Vec<T> { fn clear(vec *Vec) void { free(vec.dat); - vec.len = 0; - vec.cap = 0; + *vec = {}; } fn compact(vec *Vec) [#]T { @@ -34,6 +33,14 @@ struct Vec<T> { return vec.dat[0::vec.len]; } + fn move(vec *Vec, alloc *Allocator) [#]T { + let len = vec.len; + let dat *T = alloc->alloc(len * sizeof T); + memcpy(dat, vec.dat, len * sizeof T); + vec->clear(); + return dat[0::len]; + } + fn last(vec *const Vec) T { return vec.dat[vec.len - 1]; } fn lastp(vec *Vec) *T { return &vec.dat[vec.len - 1]; } |