aboutsummaryrefslogtreecommitdiffstats
path: root/include/utility.h
diff options
context:
space:
mode:
authorjustanothercatgirl <sotov2070@gmail.com>2024-05-19 11:19:51 +0300
committerjustanothercatgirl <sotov2070@gmail.com>2024-05-19 11:33:00 +0300
commitdff89dcae590315c6916bc24407f9c80dd74f049 (patch)
tree8da32228273b0686376b17e7a9c6989d5d67eae5 /include/utility.h
parenta5f0d6ae9ace560b67c114af9071a268d8df2dc9 (diff)
tobeamended
Diffstat (limited to 'include/utility.h')
-rw-r--r--include/utility.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/include/utility.h b/include/utility.h
index 4f264f0..85948cf 100644
--- a/include/utility.h
+++ b/include/utility.h
@@ -4,6 +4,8 @@
#define stringify(val) _stringify_helper(val)
#define _stringify_helper(val) #val
+#define string_concat_separator(first, ...) stringify(first) ";" string_concat_separator(__VA_ARGS__)
+
#define struct_member_size(type, member) sizeof(( (type*)0 )->member)
typedef unsigned char byte;
#define upper_2_power_32(number) (32 - __builtin_clz(number))
@@ -11,7 +13,7 @@ typedef unsigned char byte;
typedef int(*qsort_cmp_t)(const void*, const void*);
#define get_qsort_cmp(type) __qsort_cmps[sizeof(type)]
-extern const qsort_cmp_t __qsort_cmps[];
+extern const qsort_cmp_t __qsort_cmps[64];
#ifdef UTILITY_EXPOSE_HELPERS
#define _UTILITY_STATIC
@@ -58,17 +60,26 @@ _UTILITY_STATIC int __default_long_cmp(const void* a, const void* b) {
return 0;
}
+#ifdef __GNUC__
// cope
#pragma GCC diagnostic ignored "-Woverride-init" // Is is meant to override it on different platforms
-const qsort_cmp_t __qsort_cmps[] = {
+const qsort_cmp_t __qsort_cmps[64] = {
[sizeof(char)] = __default_char_cmp,
[sizeof(short)] = __default_short_cmp,
[sizeof(int)] = __default_int_cmp,
[sizeof(long)] = __default_long_cmp,
[sizeof(long long)] = __default_long_long_cmp,
- [64] = 0,
+ [63] = 0,
};
#pragma GCC diagnostic warning "-Woverride-init"
+#else // not __GNUC__
+const qsort_cmp_t __qsort_cmps[64] = {
+ 0,
+ __default_char_cmp, __default_short_cmp, 0, __default_int_cmp,
+ 0, 0, 0, __default_long_long_cmp,
+};
+#endif // __GNUC__
+
#endif // UTILITY_IMPLEMENTATION