summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmap_test.c2
-rw-r--r--cvector.h12
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
@@ -98,18 +98,26 @@ static inline void cvector_##tag##_insert(CVector_##tag* self, size_t pos, 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; \
+ } \
+} \
+ \
\
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; \