diff options
| author | tylo <[email protected]> | 2020-08-26 17:49:24 +0200 |
|---|---|---|
| committer | tylo <[email protected]> | 2020-08-26 17:49:24 +0200 |
| commit | ee8a5b710394cf01d196834056f181c490c7b9a5 (patch) | |
| tree | c3680466218d018c59fa1b20afd15bb3f1048e42 | |
| parent | fdf71253f9ff323d30dc51a15bbc67a9ff947562 (diff) | |
| download | STC-modified-ee8a5b710394cf01d196834056f181c490c7b9a5.tar.gz STC-modified-ee8a5b710394cf01d196834056f181c490c7b9a5.zip | |
Added valueFromRaw template parameter to cvec and clist. Affects generic c_push(). Removed warnings cmap and cstr.
| -rw-r--r-- | stc/carray.h | 3 | ||||
| -rw-r--r-- | stc/clist.h | 39 | ||||
| -rw-r--r-- | stc/cmap.h | 6 | ||||
| -rw-r--r-- | stc/cstr.h | 12 | ||||
| -rw-r--r-- | 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; i<size; ++i) clist_##tag##_push_back(self, in[i]); \
} \
STC_API void \
@@ -201,7 +214,7 @@ clist_##tag##_find_before(clist_##tag* self, RawValue val) { \
clist_##tag##_iter_t prev = {self->last, 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
@@ -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
@@ -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*
@@ -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; i<size; ++i) self->data[i] = in[i]; \
+ for (size_t i=0; i<size; ++i) self->data[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)
|
