From ee8a5b710394cf01d196834056f181c490c7b9a5 Mon Sep 17 00:00:00 2001 From: tylo Date: Wed, 26 Aug 2020 17:49:24 +0200 Subject: Added valueFromRaw template parameter to cvec and clist. Affects generic c_push(). Removed warnings cmap and cstr. --- stc/carray.h | 3 +-- stc/clist.h | 39 ++++++++++++++++++++++++++------------- stc/cmap.h | 6 +++--- stc/cstr.h | 12 ++++++++++++ stc/cvec.h | 31 ++++++++++++++++++++----------- 5 files changed, 62 insertions(+), 29 deletions(-) diff --git a/stc/carray.h b/stc/carray.h index 3a9dfc8f..387b5cc9 100644 --- a/stc/carray.h +++ b/stc/carray.h @@ -179,7 +179,6 @@ STC_INLINE size_t _carray3_size(const size_t* zdim) { return a->data + z*a->_yxdim + y*carray3_xdim(*a) + x; \ } \ typedef Value carray1##tag##_value_t; \ - typedef Value carray2##tag##_value_t; \ - typedef Value carray3##tag##_value_t + typedef carray1##tag##_value_t carray2##tag##_value_t, carray3##tag##_value_t #endif diff --git a/stc/clist.h b/stc/clist.h index d82a7f28..99a57686 100644 --- a/stc/clist.h +++ b/stc/clist.h @@ -63,9 +63,9 @@ #define declare_clist_3(tag, Value, valueDestroy) \ declare_clist_4(tag, Value, valueDestroy, c_default_compare) #define declare_clist_4(tag, Value, valueDestroy, valueCompare) \ - declare_clist_6(tag, Value, valueDestroy, Value, valueCompare, c_default_to_raw) + declare_clist_7(tag, Value, valueDestroy, Value, valueCompare, c_default_to_raw, c_default_from_raw) #define declare_clist_str() \ - declare_clist_6(str, cstr_t, cstr_destroy, const char*, cstr_compare_raw, cstr_to_raw) + declare_clist_7(str, cstr_t, cstr_destroy, const char*, cstr_compare_raw, cstr_to_raw, cstr_make) #define declare_clist_types(tag, Value) \ typedef struct clist_##tag##_node { \ @@ -87,9 +87,11 @@ #define clist_empty(list) ((list).last == NULL) -#define declare_clist_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueGetRaw) \ +#define declare_clist_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) \ \ declare_clist_types(tag, Value); \ + typedef RawValue clist_##tag##_rawvalue_t; \ + typedef clist_##tag##_rawvalue_t clist_##tag##_input_t; \ \ STC_INLINE clist_##tag \ clist_##tag##_init(void) {clist_##tag x = clist_init; return x;} \ @@ -99,14 +101,26 @@ clist_##tag##_clear(clist_##tag* self) {clist_##tag##_destroy(self);} \ STC_API void \ clist_##tag##_push_back(clist_##tag* self, Value value); \ + STC_INLINE void \ + clist_##tag##_push_back_raw(clist_##tag* self, RawValue rawValue) { \ + clist_##tag##_push_back(self, valueFromRaw(rawValue)); \ + } \ STC_API void \ clist_##tag##_push_front(clist_##tag* self, Value value); \ + STC_INLINE void \ + clist_##tag##_push_front_raw(clist_##tag* self, RawValue rawValue) { \ + clist_##tag##_push_front(self, valueFromRaw(rawValue)); \ + } \ STC_API void \ - clist_##tag##_push_n(clist_##tag *self, const Value in[], size_t size); \ + clist_##tag##_push_n(clist_##tag *self, const clist_##tag##_input_t in[], size_t size); \ STC_API void \ clist_##tag##_pop_front(clist_##tag* self); \ STC_API void \ clist_##tag##_insert_after(clist_##tag* self, clist_##tag##_iter_t pos, Value value); \ + STC_INLINE void \ + clist_##tag##_insert_after_raw(clist_##tag* self, clist_##tag##_iter_t pos, RawValue rawValue) { \ + clist_##tag##_push_back(self, valueFromRaw(rawValue)); \ + } \ STC_API void \ clist_##tag##_erase_after(clist_##tag* self, clist_##tag##_iter_t pos); \ STC_API void \ @@ -141,15 +155,14 @@ clist_##tag##_iter_t it = {self->last, NULL, &self->last}; return it; \ } \ \ - implement_clist_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueGetRaw) \ - typedef RawValue clist_##tag##_rawvalue_t; \ - typedef Value clist_##tag##_value_t, clist_##tag##_input_t + implement_clist_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) \ + typedef Value clist_##tag##_value_t /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) -#define implement_clist_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueGetRaw) \ +#define implement_clist_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) \ \ STC_API void \ clist_##tag##_destroy(clist_##tag* self) { \ @@ -168,7 +181,7 @@ if (!self->last) self->last = entry; \ } \ STC_API void \ - clist_##tag##_push_n(clist_##tag *self, const Value in[], size_t size) { \ + clist_##tag##_push_n(clist_##tag *self, const clist_##tag##_input_t in[], size_t size) { \ for (size_t i=0; ilast, NULL, &self->last}; \ c_foreach (i, clist_##tag, *self) { \ - RawValue r = valueGetRaw(&i.item->value); \ + RawValue r = valueToRaw(&i.item->value); \ if (valueCompareRaw(&r, &val) == 0) \ return prev; \ prev = i; \ @@ -225,8 +238,8 @@ \ static inline int \ clist_##tag##_sort_compare(const void* x, const void* y) { \ - RawValue a = valueGetRaw(&((clist_##tag##_node_t *) x)->value); \ - RawValue b = valueGetRaw(&((clist_##tag##_node_t *) y)->value); \ + RawValue a = valueToRaw(&((clist_##tag##_node_t *) x)->value); \ + RawValue b = valueToRaw(&((clist_##tag##_node_t *) y)->value); \ return valueCompareRaw(&a, &b); \ } \ STC_API void \ @@ -325,7 +338,7 @@ _clist_mergesort(clist_void_node_t *list, int (*cmp)(const void*, const void*)) } #else -#define implement_clist_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueGetRaw) +#define implement_clist_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) #endif #endif diff --git a/stc/cmap.h b/stc/cmap.h index 15906880..211fea1a 100644 --- a/stc/cmap.h +++ b/stc/cmap.h @@ -307,7 +307,7 @@ STC_API size_t \ ctype##_##tag##_reserve(ctype##_##tag* self, size_t newcap) { \ size_t oldcap = self->bucket_count; \ if (self->size > newcap) return oldcap; \ - newcap /= self->max_load_factor; newcap |= 1; \ + newcap = (size_t) (newcap / self->max_load_factor) | 1; \ ctype##_##tag tmp = { \ c_new_n(ctype##_##tag##_entry_t, newcap), \ (uint8_t *) calloc(newcap, sizeof(uint8_t)), \ @@ -384,13 +384,13 @@ STC_API uint32_t c_default_hash16(const void *data, size_t len) { const volatile uint16_t *key = (const uint16_t *) data; uint64_t x = 0xc613fc15u; while (len -= 2) x = ((*key++ + x) * 2654435769u) >> 13; - return x; + return (uint32_t) x; } STC_API uint32_t c_default_hash32(const void* data, size_t len) { const volatile uint32_t *key = (const uint32_t *) data; uint64_t x = *key++ * 2654435769u; while (len -= 4) x ^= *key++ * 2654435769u; - return x; + return (uint32_t) x; } #else diff --git a/stc/cstr.h b/stc/cstr.h index 4d6f7639..64b823ff 100644 --- a/stc/cstr.h +++ b/stc/cstr.h @@ -234,6 +234,13 @@ cstr_make_n(const char* str, size_t len) { STC_API cstr_t cstr_from(const char* fmt, ...) { + #if defined(__clang__) + # pragma clang diagnostic push + # pragma clang diagnostic ignored "-Wdeprecated-declarations" + #elif defined(_MSC_VER) + # pragma warning(push) + # pragma warning(disable: 4996) + #endif cstr_t tmp = cstr_init; va_list args, args2; va_start(args, fmt); @@ -247,6 +254,11 @@ cstr_from(const char* fmt, ...) { } va_end(args2); return tmp; + #if defined(__clang__) + # pragma clang diagnostic pop + #elif defined(_MSC_VER) + # pragma warning(push) + #endif } STC_API cstr_t* diff --git a/stc/cvec.h b/stc/cvec.h index 8706cb65..d8f6cf98 100644 --- a/stc/cvec.h +++ b/stc/cvec.h @@ -40,16 +40,18 @@ #define declare_cvec_3(tag, Value, valueDestroy) \ declare_cvec_4(tag, Value, valueDestroy, c_default_compare) #define declare_cvec_4(tag, Value, valueDestroy, valueCompare) \ - declare_cvec_6(tag, Value, valueDestroy, valueCompare, Value, c_default_to_raw) + declare_cvec_7(tag, Value, valueDestroy, valueCompare, Value, c_default_to_raw, c_default_from_raw) #define declare_cvec_str() \ - declare_cvec_6(str, cstr_t, cstr_destroy, cstr_compare_raw, const char*, cstr_to_raw) + declare_cvec_7(str, cstr_t, cstr_destroy, cstr_compare_raw, const char*, cstr_to_raw, cstr_make) -#define declare_cvec_6(tag, Value, valueDestroy, valueCompareRaw, RawValue, valueToRaw) \ +#define declare_cvec_7(tag, Value, valueDestroy, valueCompareRaw, RawValue, valueToRaw, valueFromRaw) \ \ typedef struct cvec_##tag { \ Value* data; \ } cvec_##tag; \ +typedef RawValue cvec_##tag##_rawvalue_t; \ +typedef cvec_##tag##_rawvalue_t cvec_##tag##_input_t; \ \ STC_API void \ cvec_##tag##_destroy(cvec_##tag* self); \ @@ -58,11 +60,19 @@ cvec_##tag##_reserve(cvec_##tag* self, size_t cap); \ STC_API void \ cvec_##tag##_resize(cvec_##tag* self, size_t size, Value null_val); \ STC_API void \ -cvec_##tag##_push_n(cvec_##tag *self, const Value in[], size_t size); \ +cvec_##tag##_push_n(cvec_##tag *self, const cvec_##tag##_input_t in[], size_t size); \ STC_API void \ cvec_##tag##_push_back(cvec_##tag* self, Value value); \ +STC_INLINE void \ +cvec_##tag##_push_back_raw(cvec_##tag* self, cvec_##tag##_rawvalue_t rawValue) { \ + cvec_##tag##_push_back(self, valueFromRaw(rawValue)); \ +} \ STC_API void \ cvec_##tag##_insert(cvec_##tag* self, size_t pos, Value value); \ +STC_INLINE void \ +cvec_##tag##_insert_raw(cvec_##tag* self, size_t pos, RawValue rawValue) { \ + cvec_##tag##_insert(self, pos, valueFromRaw(rawValue)); \ +} \ STC_API void \ cvec_##tag##_erase(cvec_##tag* self, size_t pos, size_t size); \ STC_API void \ @@ -130,20 +140,19 @@ cvec_##tag##_begin(cvec_##tag* vec) { \ STC_INLINE void \ cvec_##tag##_next(cvec_##tag##_iter_t* it) { ++it->item; } \ \ -implement_cvec_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw) \ -typedef Value cvec_##tag##_value_t, cvec_##tag##_input_t; \ -typedef RawValue cvec_##tag##_rawvalue_t +implement_cvec_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) \ +typedef Value cvec_##tag##_value_t /* -------------------------- IMPLEMENTATION ------------------------- */ #if !defined(STC_HEADER) || defined(STC_IMPLEMENTATION) -#define implement_cvec_6(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw) \ +#define implement_cvec_7(tag, Value, valueDestroy, RawValue, valueCompareRaw, valueToRaw, valueFromRaw) \ \ STC_API void \ -cvec_##tag##_push_n(cvec_##tag *self, const Value in[], size_t size) { \ +cvec_##tag##_push_n(cvec_##tag *self, const cvec_##tag##_input_t in[], size_t size) { \ cvec_##tag##_reserve(self, cvec_size(*self) + size); \ _cvec_size(*self) += size; \ - for (size_t i=0; idata[i] = in[i]; \ + for (size_t i=0; idata[i] = valueFromRaw(in[i]); \ } \ \ STC_API void \ @@ -219,7 +228,7 @@ cvec_##tag##_value_compare(const Value* x, const Value* y) { \ } #else -#define implement_cvec_6(tag, Value, valueDestroy, valueCompareRaw, RawValue, valueToRaw) +#define implement_cvec_7(tag, Value, valueDestroy, valueCompareRaw, RawValue, valueToRaw, valueFromRaw) #endif #if defined(_WIN32) && defined(_DLL) -- cgit v1.2.3