73 lines
2.6 KiB
C
73 lines
2.6 KiB
C
/*
|
|
is parametrized: no
|
|
*/
|
|
|
|
#ifndef GUF_UTILS_H
|
|
#define GUF_UTILS_H
|
|
#include "guf_common.h"
|
|
#include "guf_assert.h"
|
|
|
|
static inline void guf_platform_assert_endianness(void)
|
|
{
|
|
const unsigned i = 1;
|
|
const char *bytes = (const char*)&i;
|
|
const bool is_big_endian = bytes[0] != 1;
|
|
#if defined(GUF_PLATFORM_LITTLE_ENDIAN)
|
|
GUF_ASSERT_RELEASE(!is_big_endian)
|
|
#elif defined(GUF_PLATFORM_BIG_ENDIAN)
|
|
GUF_ASSERT_RELEASE(is_big_endian)
|
|
#endif
|
|
}
|
|
|
|
static inline void guf_platform_assert_native_word_bits(void)
|
|
{
|
|
const int bits = sizeof(void*) * CHAR_BIT;
|
|
GUF_ASSERT_RELEASE(GUF_PLATFORM_BITS == bits);
|
|
}
|
|
|
|
#ifdef NDEBUG
|
|
#define GUF_DBG_STR "release"
|
|
#else
|
|
#define GUF_DBG_STR "debug"
|
|
#endif
|
|
|
|
#if defined(GUF_STDC_AT_LEAST_C23)
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C23 (or above) " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C23 (or above) " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#elif defined(GUF_STDC_AT_LEAST_C17)
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C17 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C17 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#elif defined(GUF_STDC_AT_LEAST_C11)
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C11 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C11 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#elif defined(GUF_STDC_AT_LEAST_C99)
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C99 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C99 " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#elif defined(GUF_STDCPP_AT_LEAST_CPP11)
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C++11 (or above) " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C++11 (or above) " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#else
|
|
#ifdef GUF_PLATFORM_LITTLE_ENDIAN
|
|
#define GUF_PLATFORM_STRING "C?? " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "little-endian " GUF_DBG_STR
|
|
#else
|
|
#define GUF_PLATFORM_STRING "C?? " GUF_STRINGIFY(GUF_PLATFORM_BITS) "-bit " "big-endian " GUF_DBG_STR
|
|
#endif
|
|
#endif
|
|
|
|
#endif
|