9 #ifndef MI_BASE_TYPES_H
10 #define MI_BASE_TYPES_H
18 #ifndef MI_BASE_NO_STL
20 #endif // MI_BASE_NO_STL
46 #if defined(MI_COMPILER_MSC)
48 typedef signed __int64
Sint64;
49 typedef unsigned __int64
Uint64;
51 #elif defined(MI_COMPILER_GCC) // defined(MI_COMPILER_MSC)
56 #else // defined(MI_COMPILER_GCC)
58 typedef signed long long Sint64;
59 typedef unsigned long long Uint64;
61 #endif // defined(MI_COMPILER_GCC)
81 #define MI_BASE_FMT_MI_SINT64 "lld"
82 #else // MI_ARCH_64BIT
83 #define MI_BASE_FMT_MI_SINT64 "d"
84 #endif // MI_ARCH_64BIT
93 #define MI_BASE_FMT_MI_UINT64 "llu"
94 #else // MI_ARCH_64BIT
95 #define MI_BASE_FMT_MI_UINT64 "u"
96 #endif // MI_ARCH_64BIT
105 #else // MI_ARCH_64BIT
107 #endif // MI_ARCH_64BIT
115 #else // MI_ARCH_64BIT
117 #endif // MI_ARCH_64BIT
122 #else // MI_ARCH_64BIT
125 #endif // MI_ARCH_64BIT
133 #else // MI_ARCH_64BIT
135 #endif // MI_ARCH_64BIT
143 #else // MI_ARCH_64BIT
145 #endif // MI_ARCH_64BIT
153 #else // MI_ARCH_64BIT
155 #endif // MI_ARCH_64BIT
164 #define MI_BASE_FMT_MI_SIZE "llu"
165 #else // MI_ARCH_64BIT
166 #define MI_BASE_FMT_MI_SIZE "u"
167 #endif // MI_ARCH_64BIT
176 #define MI_BASE_FMT_MI_DIFFERENCE "lld"
177 #else // MI_ARCH_64BIT
178 #define MI_BASE_FMT_MI_DIFFERENCE "d"
179 #endif // MI_ARCH_64BIT
184 #define MI_PI 3.14159265358979323846
185 #define MI_PI_2 1.57079632679489661923
187 #define MI_PI_4 0.78539816339744830962
216 template <
typename T>
229 template <
typename T>
232 if (lhs < rhs)
return LESS;
233 else if (rhs < lhs)
return GREATER;
241 #ifdef MI_BASE_NO_STL
245 {
return a < b ? a : b; }
249 {
return a > b ? a : b; }
251 #else // MI_BASE_NO_STL
256 #endif // MI_BASE_NO_STL
261 {
return a < b ? a : b; }
263 {
return a < b ? a : b; }
265 {
return a < b ? a : b; }
267 {
return a < b ? a : b; }
269 {
return a < b ? a : b; }
271 {
return a < b ? a : b; }
273 {
return a < b ? a : b; }
275 {
return a < b ? a : b; }
277 {
return a < b ? a : b; }
279 {
return a < b ? a : b; }
282 {
return a > b ? a : b; }
284 {
return a > b ? a : b; }
286 {
return a > b ? a : b; }
288 {
return a > b ? a : b; }
290 {
return a > b ? a : b; }
292 {
return a > b ? a : b; }
294 {
return a > b ? a : b; }
296 {
return a > b ? a : b; }
298 {
return a > b ? a : b; }
300 {
return a > b ? a : b; }
315 template <
class Target,
class Source>
328 template <
class Target,
class Source>
332 Binary_cast<Target, Source> val_;
345 template <
typename T>
375 static T (
min)()
throw() {
return T(); }
383 static T (
max)()
throw() {
return T(); }
413 template <
typename T>
450 static Sint32 (
min)()
throw() {
return -2147483647 - 1; }
459 static Sint64 (
min)()
throw() {
return -9223372036854775807LL - 1LL; }
460 static Sint64 (
max)()
throw() {
return 9223372036854775807LL; }
489 static Uint64 (
max)()
throw() {
return 18446744073709551615ULL; }
493 #ifdef MI_ARCH_BIG_ENDIAN
494 # define MI__FLOAT32_INF_REP { 0x7f80, 0 }
495 # define MI__FLOAT32_QNAN_REP { 0x7fc1, 0 }
496 # define MI__FLOAT32_SNAN_REP { 0x7f81, 0 }
497 # define MI__FLOAT64_INF_REP { 0x7ff0, 0, 0, 0 }
498 # define MI__FLOAT64_QNAN_REP { 0x7ff9, 0, 0, 0 }
499 # define MI__FLOAT64_SNAN_REP { 0x7ff1, 0, 0, 0 }
500 #endif // MI_ARCH_BIG_ENDIAN
501 #ifdef MI_ARCH_LITTLE_ENDIAN
502 # define MI__FLOAT32_INF_REP { 0, 0x7f80 }
503 # define MI__FLOAT32_QNAN_REP { 0, 0x7fc0 }
504 # define MI__FLOAT32_SNAN_REP { 0, 0x7fa0 }
505 # define MI__FLOAT64_INF_REP { 0, 0, 0, 0x7ff0 }
506 # define MI__FLOAT64_QNAN_REP { 0, 0, 0, 0x7ff8 }
507 # define MI__FLOAT64_SNAN_REP { 0, 0, 0, 0x7ff4 }
508 #endif // MI_ARCH_LITTLE_ENDIAN
527 Float32_rep rep = { MI__FLOAT32_INF_REP };
531 Float32_rep rep = { MI__FLOAT32_QNAN_REP };
535 Float32_rep rep = { MI__FLOAT32_SNAN_REP };
547 static Float64 (
min)()
throw() {
return 2.2250738585072014e-308; }
548 static Float64 (
max)()
throw() {
return 1.7976931348623158e+308; }
551 Float64_rep rep = { MI__FLOAT64_INF_REP };
555 Float64_rep rep = { MI__FLOAT64_QNAN_REP };
559 Float64_rep rep = { MI__FLOAT64_SNAN_REP };
572 #endif // MI_BASE_TYPES_H