From fe30df42ee433a17636b02bc2df45337e96f1ced Mon Sep 17 00:00:00 2001 From: Tyge Løvset <60263450+tylo-work@users.noreply.github.com> Date: Wed, 4 Mar 2020 22:24:31 +0100 Subject: Refactoring, cleanup. --- cvector.h | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) (limited to 'cvector.h') diff --git a/cvector.h b/cvector.h index 49f06c77..9bb983d5 100644 --- a/cvector.h +++ b/cvector.h @@ -25,39 +25,38 @@ static inline cvector_size_t _cvector_safe_capacity(const void* data) { } -#define CVector(tag) CVector_##tag##_t -#define CVectorIter(tag) CVectorIter_##tag##_t +#define CVector(tag) CVector_##tag##_t +#define CVectorIter(tag) CVectorIter_##tag##_t -#define cvector_INIT {NULL} +#define cvector_initializer {NULL} #define cvector_size(cv) _cvector_safe_size((cv).data) #define cvector_capacity(cv) _cvector_safe_capacity((cv).data) #define cvector_empty(cv) (_cvector_safe_size((cv).data) == 0) #define declare_CVector(...) cdef_MACRO_OVERLOAD(declare_CVector, __VA_ARGS__) -#define declare_CVector_2(tag, T) declare_CVector_3(tag, T, cdef_destroy) +#define declare_CVector_2(tag, Value) declare_CVector_3(tag, Value, cdef_destroy) #define declare_CVector_STR(tag) declare_CVector_3(tag, CString, cstring_destroy) -#define declare_CVector_3(tag, T, valueDestroy) \ -typedef T cvector_##tag##_value_t; \ +#define declare_CVector_3(tag, Value, valueDestroy) \ typedef struct CVector(tag) { \ - T* data; \ + Value* data; \ } CVector(tag); \ typedef struct CVectorIter(tag) { \ - T* item; \ + Value* item; \ } CVectorIter(tag); \ \ static inline CVector(tag) cvector_##tag##_init(void) { \ - CVector(tag) cv = cvector_INIT; \ + CVector(tag) cv = cvector_initializer; \ return cv; \ } \ \ static inline void cvector_##tag##_swap(CVector(tag)* a, CVector(tag)* b) { \ - T* data = a->data; a->data = b->data; b->data = data; \ + Value* data = a->data; a->data = b->data; b->data = data; \ } \ \ static inline void cvector_##tag##_destroy(CVector(tag)* self) { \ - T* p = self->data; \ + Value* p = self->data; \ cvector_size_t i = 0, n = cvector_size(*self); \ for (; i < n; ++p, ++i) valueDestroy(p); \ free(_cvector_alloced(self->data)); \ @@ -66,32 +65,32 @@ static inline void cvector_##tag##_destroy(CVector(tag)* self) { \ static inline void cvector_##tag##_reserve(CVector(tag)* self, cvector_size_t cap) { \ if (cap > cvector_capacity(*self)) { \ cvector_size_t len = cvector_size(*self); \ - cvector_size_t* rep = (cvector_size_t *) realloc(_cvector_alloced(self->data), 2 * sizeof(cvector_size_t) + cap * sizeof(T)); \ - self->data = (T *) (rep + 2); \ + cvector_size_t* rep = (cvector_size_t *) realloc(_cvector_alloced(self->data), 2 * sizeof(cvector_size_t) + cap * sizeof(Value)); \ + self->data = (Value *) (rep + 2); \ rep[0] = len; \ rep[1] = cap; \ } \ } \ \ \ -static inline CVector(tag) cvector_##tag##_make(const T* data, cvector_size_t len) { \ - CVector(tag) cv = cvector_INIT; \ +static inline CVector(tag) cvector_##tag##_make(const Value* data, cvector_size_t len) { \ + CVector(tag) cv = cvector_initializer; \ if (len) { \ cvector_##tag##_reserve(&cv, len); \ - memcpy(cv.data, data, len * sizeof(T)); \ + memcpy(cv.data, data, len * sizeof(Value)); \ _cvector_size(cv) = len; \ } \ return cv; \ } \ \ static inline void cvector_##tag##_clear(CVector(tag)* self) { \ - CVector(tag) cv = cvector_INIT; \ + CVector(tag) cv = cvector_initializer; \ cvector_##tag##_destroy(self); \ *self = cv; \ } \ \ \ -static inline void cvector_##tag##_push(CVector(tag)* self, T value) { \ +static inline void cvector_##tag##_push(CVector(tag)* self, Value value) { \ cvector_size_t newsize = cvector_size(*self) + 1; \ if (newsize > cvector_capacity(*self)) \ cvector_##tag##_reserve(self, 7 + newsize * 5 / 3); \ @@ -99,15 +98,15 @@ static inline void cvector_##tag##_push(CVector(tag)* self, T value) { \ _cvector_size(*self) = newsize; \ } \ \ -static inline void cvector_##tag##_insert(CVector(tag)* self, cvector_size_t pos, T value) { \ +static inline void cvector_##tag##_insert(CVector(tag)* self, cvector_size_t pos, Value value) { \ cvector_##tag##_push(self, value); \ cvector_size_t len = cvector_size(*self); \ - memmove(&self->data[pos + 1], &self->data[pos], (len - pos - 1) * sizeof(T)); \ + memmove(&self->data[pos + 1], &self->data[pos], (len - pos - 1) * sizeof(Value)); \ self->data[pos] = value; \ } \ \ \ -static inline T cvector_##tag##_back(CVector(tag) cv) { \ +static inline Value cvector_##tag##_back(CVector(tag) cv) { \ return cv.data[_cvector_size(cv) - 1]; \ } \ \ @@ -131,7 +130,7 @@ static inline CVectorIter(tag) cvector_##tag##_next(CVectorIter(tag) iter) { \ static inline CVectorIter(tag) cvector_##tag##_end(CVector(tag) vec) { \ CVectorIter(tag) iter = {vec.data + cvector_size(vec)}; \ return iter; \ -} - +} \ +typedef Value cvector_##tag##_value_t #endif -- cgit v1.2.3