ZenLib
|
00001 // ZenLib::ZenTypes - To be independant of platform & compiler 00002 // Copyright (C) 2002-2011 MediaArea.net SARL, Info@MediaArea.net 00003 // 00004 // This software is provided 'as-is', without any express or implied 00005 // warranty. In no event will the authors be held liable for any damages 00006 // arising from the use of this software. 00007 // 00008 // Permission is granted to anyone to use this software for any purpose, 00009 // including commercial applications, and to alter it and redistribute it 00010 // freely, subject to the following restrictions: 00011 // 00012 // 1. The origin of this software must not be misrepresented; you must not 00013 // claim that you wrote the original software. If you use this software 00014 // in a product, an acknowledgment in the product documentation would be 00015 // appreciated but is not required. 00016 // 2. Altered source versions must be plainly marked as such, and must not be 00017 // misrepresented as being the original software. 00018 // 3. This notice may not be removed or altered from any source distribution. 00019 // 00020 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00021 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00022 00023 //--------------------------------------------------------------------------- 00024 #ifndef ZenConfH 00025 #define ZenConfH 00026 //--------------------------------------------------------------------------- 00027 00028 //*************************************************************************** 00029 // Platforms 00030 //*************************************************************************** 00031 00032 //--------------------------------------------------------------------------- 00033 //Win32 00034 #if defined(__NT__) || defined(_WIN32) || defined(WIN32) 00035 #ifndef WIN32 00036 #define WIN32 00037 #endif 00038 #ifndef _WIN32 00039 #define _WIN32 00040 #endif 00041 #ifndef __WIN32__ 00042 #define __WIN32__ 1 00043 #endif 00044 #endif 00045 00046 //--------------------------------------------------------------------------- 00047 //Win64 00048 #if defined(_WIN64) || defined(WIN64) 00049 #ifndef WIN64 00050 #define WIN64 00051 #endif 00052 #ifndef _WIN64 00053 #define _WIN64 00054 #endif 00055 #ifndef __WIN64__ 00056 #define __WIN64__ 1 00057 #endif 00058 #endif 00059 00060 //--------------------------------------------------------------------------- 00061 //Windows 00062 #if defined(WIN32) || defined(WIN64) 00063 #ifndef WINDOWS 00064 #define WINDOWS 00065 #endif 00066 #ifndef _WINDOWS 00067 #define _WINDOWS 00068 #endif 00069 #ifndef __WINDOWS__ 00070 #define __WINDOWS__ 1 00071 #endif 00072 #endif 00073 00074 //--------------------------------------------------------------------------- 00075 //Unix (Linux, HP, Sun, BeOS...) 00076 #if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \ 00077 || defined(__unix) || defined(__unix__) \ 00078 || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \ 00079 || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \ 00080 || defined(__EMX__) || defined(__VMS) || defined(__BEOS__) 00081 #ifndef UNIX 00082 #define UNIX 00083 #endif 00084 #ifndef _UNIX 00085 #define _UNIX 00086 #endif 00087 #ifndef __UNIX__ 00088 #define __UNIX__ 1 00089 #endif 00090 #endif 00091 00092 //--------------------------------------------------------------------------- 00093 //MacOS Classic 00094 #if defined(macintosh) 00095 #ifndef MACOS 00096 #define MACOS 00097 #endif 00098 #ifndef _MACOS 00099 #define _MACOS 00100 #endif 00101 #ifndef __MACOS__ 00102 #define __MACOS__ 1 00103 #endif 00104 #endif 00105 00106 //--------------------------------------------------------------------------- 00107 //MacOS X 00108 #if defined(__APPLE__) && defined(__MACH__) 00109 #ifndef MACOSX 00110 #define MACOSX 00111 #endif 00112 #ifndef _MACOSX 00113 #define _MACOSX 00114 #endif 00115 #ifndef __MACOSX__ 00116 #define __MACOSX__ 1 00117 #endif 00118 #endif 00119 00120 //Test of targets 00121 #if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX) 00122 #pragma message Multiple platforms??? 00123 #endif 00124 00125 #if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX) 00126 #pragma message No known platforms, assume default 00127 #endif 00128 00129 //*************************************************************************** 00130 // Internationnal 00131 //*************************************************************************** 00132 00133 //--------------------------------------------------------------------------- 00134 //Unicode 00135 #if defined(_UNICODE) || defined(UNICODE) || defined(__UNICODE__) 00136 #ifndef _UNICODE 00137 #define _UNICODE 00138 #endif 00139 #ifndef UNICODE 00140 #define UNICODE 00141 #endif 00142 #ifndef __UNICODE__ 00143 #define __UNICODE__ 1 00144 #endif 00145 #endif 00146 00147 //--------------------------------------------------------------------------- 00148 //wchar_t stuff 00149 #if defined(MACOS) || defined(MACOSX) 00150 #include <wchar.h> 00151 #endif 00152 00153 //*************************************************************************** 00154 // Compiler bugs/unuseful warning 00155 //*************************************************************************** 00156 00157 //MSVC6 : for(int t=0; t<10; ++t) { do something }; for(int t=0; t<10; ++t) { do something } 00158 #if defined(_MSC_VER) && _MSC_VER <= 1200 00159 #define for if(true)for 00160 #pragma warning(disable:4786) // MSVC6 doesn't like typenames longer than 255 chars (which generates an enormous amount of warnings). 00161 #endif 00162 00163 //MSVC2005 : "deprecated" warning (replacement functions are not in MinGW32 or Borland!) 00164 #if defined(_MSC_VER) && _MSC_VER >= 1400 00165 #pragma warning(disable : 4996) 00166 #endif 00167 00168 //*************************************************************************** 00169 // (Without Namespace) 00170 //*************************************************************************** 00171 00172 //--------------------------------------------------------------------------- 00173 #include <limits.h> 00174 00175 //--------------------------------------------------------------------------- 00176 #if defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG)) 00177 #include "ZenLib/MemoryDebug.h" 00178 #endif // defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG)) 00179 00180 //*************************************************************************** 00181 // Compiler helpers 00182 //*************************************************************************** 00183 00184 //--------------------------------------------------------------------------- 00185 //Macro to cut down on compiler warnings 00186 #ifndef UNUSED 00187 #define UNUSED(Identifier) 00188 #endif 00189 //--------------------------------------------------------------------------- 00190 //If we need size_t specific integer conversion 00191 #if defined(__LP64__) || defined(MACOSX) 00192 #define NEED_SIZET 00193 #endif 00194 00195 //--------------------------------------------------------------------------- 00196 //(-1) is known to be the MAX of an unsigned int but GCC complains about it 00197 #include <new> 00198 #include <cstring> //size_t 00199 namespace ZenLib 00200 { 00201 const std::size_t Error=((std::size_t)(-1)); 00202 const std::size_t All=((std::size_t)(-1)); 00203 const std::size_t Unlimited=((std::size_t)(-1)); 00204 } 00205 00206 //*************************************************************************** 00207 // (With namespace) 00208 //*************************************************************************** 00209 00210 namespace ZenLib 00211 { 00212 00213 //*************************************************************************** 00214 // International 00215 //*************************************************************************** 00216 00217 //--------------------------------------------------------------------------- 00218 //Char types 00219 #undef _T 00220 #define _T(__x) __T(__x) 00221 #undef _TEXT 00222 #define _TEXT(__x) __T(__x) 00223 #undef __TEXT 00224 #define __TEXT(__x) __T(__x) 00225 #if defined(__UNICODE__) 00226 #if defined (_MSC_VER) && !defined (_NATIVE_WCHAR_T_DEFINED) 00227 #pragma message Native wchar_t is not defined, not tested, you should put /Zc:wchar_t in compiler options 00228 #endif 00229 typedef wchar_t Char; 00230 #undef __T 00231 #define __T(__x) L##__x 00232 #else // defined(__UNICODE__) 00233 typedef char Char; 00234 #undef __T 00235 #define __T(__x) __x 00236 #endif // defined(__UNICODE__) 00237 #ifdef wchar_t 00238 typedef wchar_t wchar; 00239 #endif // wchar_t 00240 00241 //*************************************************************************** 00242 // Platform differences 00243 //*************************************************************************** 00244 00245 //End of line 00246 extern const Char* EOL; 00247 extern const Char PathSeparator; 00248 00249 //*************************************************************************** 00250 // Types 00251 //*************************************************************************** 00252 00253 //--------------------------------------------------------------------------- 00254 //int 00255 typedef signed int ints; 00256 typedef unsigned int intu; 00257 00258 //--------------------------------------------------------------------------- 00259 //8-bit int 00260 #if UCHAR_MAX==0xff 00261 #undef MAXTYPE_INT 00262 #define MAXTYPE_INT 8 00263 typedef signed char int8s; 00264 typedef unsigned char int8u; 00265 #else 00266 #pragma message This machine has no 8-bit integertype? 00267 #endif 00268 00269 //--------------------------------------------------------------------------- 00270 //16-bit int 00271 #if UINT_MAX == 0xffff 00272 #undef MAXTYPE_INT 00273 #define MAXTYPE_INT 16 00274 typedef signed int int16s; 00275 typedef unsigned int int16u; 00276 #elif USHRT_MAX == 0xffff 00277 #undef MAXTYPE_INT 00278 #define MAXTYPE_INT 16 00279 typedef signed short int16s; 00280 typedef unsigned short int16u; 00281 #else 00282 #pragma message This machine has no 16-bit integertype? 00283 #endif 00284 00285 //--------------------------------------------------------------------------- 00286 //32-bit int 00287 #if UINT_MAX == 0xfffffffful 00288 #undef MAXTYPE_INT 00289 #define MAXTYPE_INT 32 00290 typedef signed int int32s; 00291 typedef unsigned int int32u; 00292 #elif ULONG_MAX == 0xfffffffful 00293 #undef MAXTYPE_INT 00294 #define MAXTYPE_INT 32 00295 typedef signed long int32s; 00296 typedef unsigned long int32u; 00297 #elif USHRT_MAX == 0xfffffffful 00298 #undef MAXTYPE_INT 00299 #define MAXTYPE_INT 32 00300 typedef signed short int32s; 00301 typedef unsigned short int32u; 00302 #else 00303 #pragma message This machine has no 32-bit integer type? 00304 #endif 00305 00306 //--------------------------------------------------------------------------- 00307 //64-bit int 00308 #if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__) 00309 #undef MAXTYPE_INT 00310 #define MAXTYPE_INT 64 00311 typedef signed long long int64s; 00312 typedef unsigned long long int64u; 00313 #elif defined(__WIN32__) 00314 #undef MAXTYPE_INT 00315 #define MAXTYPE_INT 64 00316 typedef signed __int64 int64s; 00317 typedef unsigned __int64 int64u; 00318 #else 00319 #pragma message This machine has no 64-bit integer type? 00320 #endif 00321 00322 //--------------------------------------------------------------------------- 00323 //32-bit float 00324 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00325 #undef MAXTYPE_FLOAT 00326 #define MAXTYPE_FLOAT 32 00327 typedef float float32; 00328 #else 00329 #pragma message This machine has no 32-bit float type? 00330 #endif 00331 00332 //--------------------------------------------------------------------------- 00333 //64-bit float 00334 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00335 #undef MAXTYPE_FLOAT 00336 #define MAXTYPE_FLOAT 64 00337 typedef double float64; 00338 #else 00339 #pragma message This machine has no 64-bit float type? 00340 #endif 00341 00342 //--------------------------------------------------------------------------- 00343 //80-bit float 00344 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00345 #undef MAXTYPE_FLOAT 00346 #define MAXTYPE_FLOAT 80 00347 typedef long double float80; 00348 #else 00349 #pragma message This machine has no 80-bit float type? 00350 #endif 00351 00352 //*************************************************************************** 00353 // Nested functions 00354 //*************************************************************************** 00355 00356 //Unices 00357 #if defined (UNIX) 00358 #define snwprintf swprintf 00359 #endif 00360 00361 //Windows - MSVC 00362 #if defined (_MSC_VER) 00363 #define snprintf _snprintf 00364 #define snwprintf _snwprintf 00365 #endif 00366 00367 } //namespace 00368 #endif 00369