Mercurial > lbo > hg > ylisp
changeset 85:7f0a4a258b69
base/vec: Implement yvec_clone()
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Mon, 26 Aug 2019 12:02:51 +0200 |
parents | 6a42872a9f81 |
children | 5c761c80c411 |
files | src/base/vec.c src/base/vec.h |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/base/vec.c Mon Aug 26 11:03:10 2019 +0200 +++ b/src/base/vec.c Mon Aug 26 12:02:51 2019 +0200 @@ -113,6 +113,7 @@ } void yvec_copy(yvec_t *src, yvec_t *dst) { + yvec_destroy(dst); dst->size = src->size; dst->len = src->len; dst->cap = src->len; @@ -120,6 +121,13 @@ memcpy(dst->base, src->base, src->len * src->size); } +yvec_t yvec_clone(yvec_t* src) { + yvec_t new = *src; + new.base = malloc(src->size * src->len); + memcpy(new.base, src->base, src->size * src->len); + return new; +} + void yvec_destroy(yvec_t *vec) { free(vec->base); memset(vec, 0, sizeof(yvec_t));
--- a/src/base/vec.h Mon Aug 26 11:03:10 2019 +0200 +++ b/src/base/vec.h Mon Aug 26 12:02:51 2019 +0200 @@ -104,11 +104,16 @@ void *yvec_at(yvec_t *vec, size_t index); /** - * @brief Copy the entire contents to a new yvec. + * @brief Copy the entire contents to a new yvec. `dst` is destroyed before copying. */ void yvec_copy(yvec_t *src, yvec_t *dst); /** + * @brief Return a copy of `src` (the full buffer is copied). + */ +yvec_t yvec_clone(yvec_t* src); + +/** * @brief Deallocate a vector. Resets all fields to 0. */ void yvec_destroy(yvec_t *vec);