21 #include <sys/types.h>
54 using utf16 = wchar_t;
66 #define SYS_PRI64_PREFIX "I64"
68 #define SYS_PRI64_PREFIX "ll"
70 #define SYS_PRI64_PREFIX "l"
72 #define SYS_PRI64_PREFIX "ll"
75 #if defined(SYS_PRI64_PREFIX)
76 #define SYS_PRId64 SYS_PRI64_PREFIX "d"
77 #define SYS_PRIu64 SYS_PRI64_PREFIX "u"
78 #define SYS_PRIx64 SYS_PRI64_PREFIX "x"
79 #define SYS_PRIX64 SYS_PRI64_PREFIX "X"
82 #if SIZEOF_VOID_P == 8
85 #define SYS_PRIiPTR PRIiPTR
86 #define SYS_PRIuPTR PRIuPTR
88 #define SYS_PRIiPTR SYS_PRId64
89 #define SYS_PRIuPTR SYS_PRIu64
91 #elif SIZEOF_VOID_P == 4
92 #define SYS_PRIiPTR "d"
93 #define SYS_PRIuPTR "u"
95 #error Unknown SIZEOF_VOID_P
104 using int64 = __int64;
105 using uint64 =
unsigned __int64;
110 using int64 = int64_t;
114 using uint64 =
unsigned long;
134 template <
typename T>
138 return const_cast<T *
>(foo);
141 template <
typename T>
145 return const_cast<T &
>(foo);
151 #if defined(GCC3) && defined(AMD64)
152 #define SYS_INT64_C(x) x ## L
153 #define SYS_UINT64_C(x) x ## UL
155 #define SYS_INT64_C(x) x ## LL
156 #define SYS_UINT64_C(x) x ## ULL
160 #define SYS_INT8_MIN std::numeric_limits<int8>::min()
161 #define SYS_INT8_MAX std::numeric_limits<int8>::max()
162 #define SYS_UINT8_MAX std::numeric_limits<uint8>::max()
165 #define SYS_INT16_MIN std::numeric_limits<int16>::min()
166 #define SYS_INT16_MAX std::numeric_limits<int16>::max()
167 #define SYS_UINT16_MAX std::numeric_limits<uint16>::max()
170 #define SYS_INT32_MIN std::numeric_limits<int32>::min()
171 #define SYS_INT32_MAX std::numeric_limits<int32>::max()
172 #define SYS_UINT32_MAX std::numeric_limits<uint32>::max()
175 #define SYS_INT64_MIN std::numeric_limits<int64>::min()
176 #define SYS_INT64_MAX std::numeric_limits<int64>::max()
177 #define SYS_UINT64_MAX std::numeric_limits<uint64>::max()
180 #define SYS_EXINT_MIN SYS_INT64_MIN
181 #define SYS_EXINT_MAX SYS_INT64_MAX
190 #define SYS_DBL_DIG 17
191 #define SYS_FLT_DIG 9
208 #define SYS_FTOLERANCE ((fpreal32)0.00001)
209 #define SYS_FTOLERANCE_D (fpreal64(SYS_FTOLERANCE))
213 #define SYS_FP32_EPSILON std::numeric_limits<fpreal32>::epsilon()
214 #define SYS_FP64_EPSILON std::numeric_limits<fpreal64>::epsilon()
216 #define SYS_FP16_MIN ((fpreal32)H_REAL16_MIN)
217 #define SYS_FP32_MIN ((fpreal32)2e-45)
218 #define SYS_FP64_MIN ((fpreal64)2e-324)
219 #define SYS_FP16_MAX ((fpreal32)H_REAL16_MAX)
220 #define SYS_FP32_MAX std::numeric_limits<fpreal32>::max()
221 #define SYS_FP64_MAX std::numeric_limits<fpreal64>::max()
256 #if SIZEOF_FPREAL_IS_4
263 #define SYS_SIZEOF_FPREAL 4
265 #define SYS_FPREAL_DIG SYS_FLT_DIG
266 #define SYS_FTOLERANCE_R (fpreal(SYS_FTOLERANCE))
267 #define SYS_FPEPSILON SYS_FP32_EPSILON
268 #define SYS_FPREAL_MIN SYS_FP32_MIN
269 #define SYS_FPREAL_MAX SYS_FP32_MAX
272 #define SYS_SCANF_FPREAL "g"
280 #define SYS_SIZEOF_FPREAL 8
282 #define SYS_FPREAL_DIG SYS_DBL_DIG
283 #define SYS_FTOLERANCE_R (fpreal(SYS_FTOLERANCE))
284 #define SYS_FPEPSILON SYS_FP64_EPSILON
285 #define SYS_FPREAL_MIN SYS_FP64_MIN
286 #define SYS_FPREAL_MAX SYS_FP64_MAX
289 #define SYS_SCANF_FPREAL "lg"
292 #define SYS_DIG_FMT_INTERNAL(PREC) "%." #PREC "g"
293 #define SYS_DIG_FMT(PREC) SYS_DIG_FMT_INTERNAL(PREC)
295 #define SYS_FLT_DIG_FMT SYS_DIG_FMT(SYS_FLT_DIG)
297 #define SYS_DBL_DIG_FMT SYS_DIG_FMT(SYS_DBL_DIG)
299 #define SYS_FPREAL_DIG_FMT SYS_DIG_FMT(SYS_FPREAL_DIG)
309 #define CONST_INT8(x) ((int8)x)
310 #define CONST_UINT8(x) ((uint8)x)
311 #define CONST_INT16(x) ((int16)x)
312 #define CONST_UINT16(x) ((uint16)x)
313 #define CONST_INT32(x) ((int32)x)
314 #define CONST_UINT32(x) ((uint32)x)
317 #define CONST_INT64(x) ((int64)x)
318 #define CONST_UINT64(x) ((uint64)x)
320 #define CONST_INT64(x) (x##LL)
321 #define CONST_UINT64(x) (x##LL)
324 #define CONST_FPREAL16(c) ((fpreal16)c)
325 #define CONST_FPREAL32(c) ((fpreal32)c)
326 #define CONST_FPREAL64(c) ((fpreal64)c)
327 #define CONST_FPREAL(c) ((fpreal)c)
332 template <
typename T>
382 EXPONENT_BIAS = 127 };
406 EXPONENT_BIAS = 1023 };
443 #if (defined(GCC3) && !defined(__clang__)) || SYS_IS_CLANG_GE(3,3)
444 #define SYS_PRINTF_CHECK_ATTRIBUTE(string_index, first_to_check) \
445 __attribute__ ((format (printf, string_index, first_to_check)))
447 #define SYS_PRINTF_CHECK_ATTRIBUTE(string_index, first_to_check)
460 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) \
461 struct __attribute__((__packed__, __aligned__(n))) name
462 # define SYS_PACKED_STRUCT_HINT_END
463 #elif defined(_MSC_VER)
464 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) \
465 __pragma(pack(push, n)) struct name
466 # define SYS_PACKED_STRUCT_HINT_END __pragma(pack(pop))
468 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) struct name
469 # define SYS_PACKED_STRUCT_HINT_END
SYS_FORCE_INLINE T * SYSconst_cast(const T *foo)
unsigned long long uint64
typedef int(WINAPI *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer
Decimal128 floating point class (IEEE 754-2008)
static fpreal64 tolerance()
static fpreal32 tolerance()