diff options
Diffstat (limited to 'include/utility.h')
-rw-r--r-- | include/utility.h | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/include/utility.h b/include/utility.h deleted file mode 100644 index 85948cf..0000000 --- a/include/utility.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef JUSTANOTHERCATGIRL_HEADERS_UTILITY -#define JUSTANOTHERCATGIRL_HEADERS_UTILITY - -#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)) -#define upper_2_power_64(number) (64 - __builtin_clzl(number)) - -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[64]; - -#ifdef UTILITY_EXPOSE_HELPERS - #define _UTILITY_STATIC - int __default_char_cmp(const void* a, const void* b); - int __default_short_cmp(const void* a, const void* b); - int __default_int_cmp(const void* a, const void* b); - int __default_long_cmp(const void* a, const void* b); - int __default_long_long_cmp(const void* a, const void* b); -#else - #define _UTILITY_STATIC static -#endif // UTILITY_EXPOSE_HELPERS - - -#ifdef UTILITY_IMPLEMENTATION - -_UTILITY_STATIC int __default_char_cmp(const void* a, const void* b) { - char x = *(char*)a, y = *(char*)b; - if (x < y) return -1; - if (x > y) return 1; - return 0; -} -_UTILITY_STATIC int __default_short_cmp(const void* a, const void* b) { - short x = *(short*)a, y = *(short*)b; - if (x < y) return -1; - if (x > y) return 1; - return 0; -} -_UTILITY_STATIC int __default_int_cmp(const void* a, const void* b) { - int x = *(int*)a, y = *(int*)b; - if (x < y) return -1; - if (x > y) return 1; - return 0; -} -_UTILITY_STATIC int __default_long_long_cmp(const void* a, const void* b) { - long long x = *(long long*)a, y = *(long long*)b; - if (x < y) return -1; - if (x > y) return 1; - return 0; -} -_UTILITY_STATIC int __default_long_cmp(const void* a, const void* b) { - long x = *(long*)a, y = *(long*)b; - if (x < y) return -1; - if (x > y) return 1; - 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[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, - [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 - - -#endif //JUSTANOTHERCATGIRL_HEADERS_UTILITY |