diff options
| author | Tyge Løvset <[email protected]> | 2020-03-06 19:33:22 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-03-06 19:33:22 +0100 |
| commit | 28db3c2e10b0a2be0609bced1862e658623bf8cd (patch) | |
| tree | 06f377d5a4a9bd03b133a08247e0f6c39150a205 | |
| parent | 4b1af0476ea6c3c859183030da705e1493656912 (diff) | |
| download | STC-modified-28db3c2e10b0a2be0609bced1862e658623bf8cd.tar.gz STC-modified-28db3c2e10b0a2be0609bced1862e658623bf8cd.zip | |
Added erase to CVector
| -rw-r--r-- | cmap_test.c | 2 | ||||
| -rw-r--r-- | 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);
@@ -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; \
|
