aboutsummaryrefslogtreecommitdiff
path: root/src/vec.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-04-03 23:32:57 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-04-03 23:32:57 +0300
commit68059b52c389143e766c5499c76c6c90c6b82846 (patch)
tree6e10707dbc417946dee5c4dbb333a4952914a9e8 /src/vec.c
parentf4be2429f38faba0c54862055f808cb242a7eb49 (diff)
downloadqbt-68059b52c389143e766c5499c76c6c90c6b82846.tar.gz
qbt-68059b52c389143e766c5499c76c6c90c6b82846.zip
add callsite register saving
Diffstat (limited to 'src/vec.c')
-rw-r--r--src/vec.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/vec.c b/src/vec.c
index e487162..7fb314e 100644
--- a/src/vec.c
+++ b/src/vec.c
@@ -49,6 +49,26 @@ void vec_append(struct vec *v, void *n)
memcpy(p, n, v->ns);
}
-void vec_destroy(struct vec *v) {
+void vec_destroy(struct vec *v)
+{
free(v->buf);
}
+
+void vec_insert(struct vec *v, void *n, size_t i)
+{
+ assert(i <= vec_len(v));
+ if (i == vec_len(v))
+ vec_append(v, n);
+
+ v->n++;
+ if (v->n >= v->s) {
+ v->s *= 2;
+ v->buf = realloc(v->buf, v->s * v->ns);
+ }
+
+ void *p = vec_at(v, i);
+ size_t elems = v->n - i - 1;
+ size_t bytes = elems * v->ns;
+ memmove(p + v->ns, p, bytes);
+ memcpy(p, n, v->ns);
+}