From 28db3c2e10b0a2be0609bced1862e658623bf8cd Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylo-work@users.noreply.github.com> Date: Fri, 6 Mar 2020 19:33:22 +0100 Subject: Added erase to CVector --- cmap_test.c | 2 +- cvector.h | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cmap_test.c b/cmap_test.c index 4c37c45e..06ea7ed1 100644 --- a/cmap_test.c +++ b/cmap_test.c @@ -27,7 +27,7 @@ #include "cstring.h" -declare_CVector(s, CString, cstring_destroy); +declare_CStringVector(s); declare_CMap_StringKey(ss, CString, cstring_destroy); declare_CMap_StringKey(si, int); declare_CMap(id, uint64_t, double); diff --git a/cvector.h b/cvector.h index c768f1d9..58085eb4 100644 --- a/cvector.h +++ b/cvector.h @@ -96,6 +96,16 @@ static inline void cvector_##tag##_insert(CVector_##tag* self, size_t pos, Value size_t len = cvector_size(*self); \ memmove(&self->data[pos + 1], &self->data[pos], (len - pos - 1) * sizeof(Value)); \ self->data[pos] = value; \ +} \ + \ +static inline void cvector_##tag##_erase(CVector_##tag* self, size_t pos, size_t size) { \ + size_t len = cvector_size(*self); \ + if (len) { \ + Value* p = &self->data[pos], *start = p, *end = p + size; \ + while (p != end) valueDestroy(p++); \ + memmove(start, end, (len - pos - size) * sizeof(Value)); \ + _cvector_size(*self) -= size; \ + } \ } \ \ \ @@ -103,13 +113,11 @@ static inline Value cvector_##tag##_back(CVector_##tag cv) { \ return cv.data[_cvector_size(cv) - 1]; \ } \ \ - \ static inline void cvector_##tag##_pop(CVector_##tag* self) { \ valueDestroy(&self->data[_cvector_size(*self) - 1]); \ --_cvector_size(*self); \ } \ \ - \ static inline cvector_##tag##_iter_t cvector_##tag##_begin(CVector_##tag vec) { \ cvector_##tag##_iter_t it = {vec.data}; \ return it; \ -- cgit v1.2.3