00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __SYS_Types__
00019 #define __SYS_Types__
00020
00021
00022 #include <sys/types.h>
00023
00024
00025
00026
00027 typedef signed char int8;
00028 typedef unsigned char uint8;
00029 typedef short int16;
00030 typedef unsigned short uint16;
00031 typedef int int32;
00032 typedef unsigned int uint32;
00033
00034 typedef unsigned char uchar;
00035 #ifndef MBSD
00036 typedef unsigned int uint;
00037 #endif
00038
00039
00040
00041
00042
00043
00044 #if defined(_MSC_VER)
00045 #define SYS_PRI64_PREFIX "I64"
00046 #elif defined(MBSD)
00047 #define SYS_PRI64_PREFIX "ll"
00048 #elif defined(SOLARIS) || defined(PPC64) || defined(AMD64)
00049 #define SYS_PRI64_PREFIX "l"
00050 #else
00051 #define SYS_PRI64_PREFIX "ll"
00052 #endif
00053
00054 #if defined(SYS_PRI64_PREFIX)
00055 #define SYS_PRId64 SYS_PRI64_PREFIX "d"
00056 #define SYS_PRIu64 SYS_PRI64_PREFIX "u"
00057 #define SYS_PRIx64 SYS_PRI64_PREFIX "x"
00058 #define SYS_PRIX64 SYS_PRI64_PREFIX "X"
00059 #endif
00060
00061
00062
00063
00064
00065
00066 #if defined(WIN32)
00067 typedef __int64 int64;
00068 typedef unsigned __int64 uint64;
00069 #elif defined(MBSD)
00070 #include <stdint.h>
00071 typedef int64_t int64;
00072 typedef uint64_t uint64;
00073 #elif defined(SOLARIS) || defined(PPC64) || defined(AMD64)
00074 typedef long int64;
00075 typedef unsigned long uint64;
00076 #else
00077 typedef long long int64;
00078 typedef unsigned long long uint64;
00079 #endif
00080
00081
00082
00083
00084
00085
00086 typedef int64 exint;
00087
00088
00089
00090
00091
00092 #if defined(GCC3) && defined(AMD64)
00093 #define SYS_INT64_C(x) x ## L
00094 #define SYS_UINT64_C(x) x ## UL
00095 #else
00096 #define SYS_INT64_C(x) x ## LL
00097 #define SYS_UINT64_C(x) x ## ULL
00098 #endif
00099
00100
00101 #define SYS_INT8_MIN (-128)
00102 #define SYS_INT8_MAX (127)
00103 #define SYS_UINT8_MAX (255)
00104
00105
00106 #define SYS_INT16_MIN (-32767-1)
00107 #define SYS_INT16_MAX (32767)
00108 #define SYS_UINT16_MAX (65535)
00109
00110
00111 #define SYS_INT32_MIN (-2147483647-1)
00112 #define SYS_INT32_MAX (2147483647)
00113 #define SYS_UINT32_MAX (4294967295U)
00114
00115
00116 #define SYS_INT64_MIN (-SYS_INT64_C(9223372036854775807)-1)
00117 #define SYS_INT64_MAX (SYS_INT64_C(9223372036854775807))
00118 #define SYS_UINT64_MAX (SYS_UINT64_C(18446744073709551615))
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128 #define SYS_DBL_DIG 17
00129 #define SYS_FLT_DIG 9
00130
00131
00132
00133
00134
00135
00136
00137
00138 typedef float fpreal32;
00139 typedef double fpreal64;
00140
00141 #ifdef __cplusplus
00142
00143 #include "fpreal16.h"
00144 #else
00145 typedef unsigned short fpreal16;
00146 #endif
00147
00148
00149
00150 #define SYS_FTOLERANCE ((fpreal32)0.00001)
00151 #define SYS_FTOLERANCE_D (fpreal64(SYS_FTOLERANCE))
00152
00153
00154
00155 #define SYS_FP32_EPSILON FLT_EPSILON
00156 #define SYS_FP64_EPSILON DBL_EPSILON
00157
00158 #define SYS_FP32_MIN ((fpreal32)2e-45)
00159 #define SYS_FP64_MIN ((fpreal64)2e-324)
00160 #define SYS_FP32_MAX ((fpreal32)FLT_MAX)
00161 #define SYS_FP64_MAX ((fpreal64)DBL_MAX)
00162
00163
00164
00165
00166 #if 0
00167
00168
00169
00170 typedef float fpreal;
00171
00172
00173 #define SYS_SIZEOF_FPREAL 4
00174
00175 #define SYS_FPREAL_DIG SYS_FLT_DIG
00176 #define SYS_FTOLERANCE_R (fpreal(SYS_FTOLERANCE))
00177 #define SYS_FPEPSILON SYS_FP32_EPSILON
00178 #define SYS_FPREAL_MIN SYS_FP32_MIN
00179 #define SYS_FPREAL_MAX SYS_FP32_MAX
00180
00181
00182 #define SYS_SCANF_FPREAL "g"
00183 #else
00184
00185
00186
00187 typedef double fpreal;
00188
00189
00190 #define SYS_SIZEOF_FPREAL 8
00191
00192 #define SYS_FPREAL_DIG SYS_DBL_DIG
00193 #define SYS_FTOLERANCE_R (fpreal(SYS_FTOLERANCE))
00194 #define SYS_FPEPSILON SYS_FP64_EPSILON
00195 #define SYS_FPREAL_MIN SYS_FP64_MIN
00196 #define SYS_FPREAL_MAX SYS_FP64_MAX
00197
00198
00199 #define SYS_SCANF_FPREAL "lg"
00200 #endif
00201
00202 #define SYS_DIG_FMT_INTERNAL(PREC) "%." #PREC "g"
00203 #define SYS_DIG_FMT(PREC) SYS_DIG_FMT_INTERNAL(PREC)
00204
00205 #define SYS_FLT_DIG_FMT SYS_DIG_FMT(SYS_FLT_DIG)
00206
00207 #define SYS_DBL_DIG_FMT SYS_DIG_FMT(SYS_DBL_DIG)
00208
00209 #define SYS_FPREAL_DIG_FMT SYS_DIG_FMT(SYS_FPREAL_DIG)
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219 #define CONST_INT8(x) ((int8)x)
00220 #define CONST_UINT8(x) ((uint8)x)
00221 #define CONST_INT16(x) ((int16)x)
00222 #define CONST_UINT16(x) ((uint16)x)
00223 #define CONST_INT32(x) ((int32)x)
00224 #define CONST_UINT32(x) ((uint32)x)
00225
00226 #if defined(WIN32)
00227 #define CONST_INT64(x) ((int64)x)
00228 #define CONST_UINT64(x) ((uint64)x)
00229 #else
00230 #define CONST_INT64(x) (x##LL)
00231 #define CONST_UINT64(x) (x##LL)
00232 #endif
00233
00234 #define CONST_FPREAL16(c) ((fpreal16)c)
00235 #define CONST_FPREAL32(c) ((fpreal32)c)
00236 #define CONST_FPREAL64(c) ((fpreal64)c)
00237 #define CONST_FPREAL(c) ((fpreal)c)
00238
00239
00240
00241
00242 template <typename T>
00243 union SYS_FPRealUnionT;
00244
00245 template <>
00246 union SYS_FPRealUnionT<fpreal32>
00247 {
00248 typedef int32 int_type;
00249 typedef uint32 uint_type;
00250 typedef fpreal32 fpreal_type;
00251
00252 enum { EXPONENT_BITS = 8, MANTISSA_BITS = 23 };
00253
00254 int_type ival;
00255 uint_type uval;
00256 fpreal_type fval;
00257 };
00258
00259 template <>
00260 union SYS_FPRealUnionT<fpreal64>
00261 {
00262 typedef int64 int_type;
00263 typedef uint64 uint_type;
00264 typedef fpreal64 fpreal_type;
00265
00266 enum { EXPONENT_BITS = 11, MANTISSA_BITS = 52 };
00267
00268 int_type ival;
00269 uint_type uval;
00270 fpreal_type fval;
00271 };
00272
00273 typedef union SYS_FPRealUnionT<fpreal> SYS_FPRealUnionR;
00274 typedef union SYS_FPRealUnionT<fpreal32> SYS_FPRealUnionF;
00275 typedef union SYS_FPRealUnionT<fpreal64> SYS_FPRealUnionD;
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285 #if defined(GCC3)
00286 #define SYS_DEPRECATED __attribute__ ((deprecated))
00287 #elif defined(_MSC_VER)
00288 #define SYS_DEPRECATED __declspec(deprecated)
00289 #else
00290 #define SYS_DEPRECATED
00291 #endif
00292
00293
00294
00295 #if defined(GCC4)
00296 #define SYS_FORCE_INLINE __attribute__ ((always_inline))
00297 #elif defined(_MSC_VER)
00298 #define SYS_FORCE_INLINE __forceinline
00299 #else
00300 #define SYS_FORCE_INLINE inline
00301 #endif
00302
00303
00304 #if defined(GCC3)
00305 #define SYS_NO_INLINE __attribute__ ((noinline))
00306 #elif defined(_MSC_VER)
00307 #define SYS_NO_INLINE __declspec(noinline)
00308 #else
00309 #define SYS_NO_INLINE
00310 #endif
00311
00312
00313
00314
00315
00316
00317 #if defined(GCC3) && !defined(__clang__)
00318 #define SYS_PRINTF_CHECK_ATTRIBUTE(string_index, first_to_check) \
00319 __attribute__ ((format (printf, string_index, first_to_check)))
00320 #else
00321 #define SYS_PRINTF_CHECK_ATTRIBUTE(string_index, first_to_check)
00322 #endif
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334 #if defined(GCC4)
00335 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) \
00336 struct __attribute__((__packed__, __aligned__(n))) name
00337 # define SYS_PACKED_STRUCT_HINT_END
00338 #elif defined(_MSC_VER)
00339 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) \
00340 __pragma(pack(push, n)) struct name
00341 # define SYS_PACKED_STRUCT_HINT_END __pragma(pack(pop))
00342 #else
00343 # define SYS_PACKED_STRUCT_HINT_BEGIN(name, n) struct name
00344 # define SYS_PACKED_STRUCT_HINT_END
00345 #endif
00346
00347
00348 #endif