aboutsummaryrefslogtreecommitdiff
path: root/src/vec.hff
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-14 09:25:16 +0200
committerlemon <lsof@mailbox.org>2022-08-14 09:25:16 +0200
commitc129f77ad724aa940b53a125de0e1e4de0ca7240 (patch)
tree57ad369bcfe02d0fb8a311c659e45cf2ae5df075 /src/vec.hff
parent66ed623e65ab9350f08061fe7cf12b989c84f65c (diff)
fix arena
Diffstat (limited to 'src/vec.hff')
-rw-r--r--src/vec.hff11
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]; }