diff options
| author | 2022-08-14 09:25:16 +0200 | |
|---|---|---|
| committer | 2022-08-14 09:25:16 +0200 | |
| commit | c129f77ad724aa940b53a125de0e1e4de0ca7240 (patch) | |
| tree | 57ad369bcfe02d0fb8a311c659e45cf2ae5df075 /src/vec.hff | |
| parent | 66ed623e65ab9350f08061fe7cf12b989c84f65c (diff) | |
fix arena
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]; } |