diff options
| author | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-03 23:32:57 +0300 |
|---|---|---|
| committer | Kimplul <kimi.h.kuparinen@gmail.com> | 2024-04-03 23:32:57 +0300 |
| commit | 68059b52c389143e766c5499c76c6c90c6b82846 (patch) | |
| tree | 6e10707dbc417946dee5c4dbb333a4952914a9e8 /src/vec.c | |
| parent | f4be2429f38faba0c54862055f808cb242a7eb49 (diff) | |
| download | qbt-68059b52c389143e766c5499c76c6c90c6b82846.tar.gz qbt-68059b52c389143e766c5499c76c6c90c6b82846.zip | |
add callsite register saving
Diffstat (limited to 'src/vec.c')
| -rw-r--r-- | src/vec.c | 22 |
1 files changed, 21 insertions, 1 deletions
@@ -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); +} |
