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 #if defined(_M_X64) || defined(_M_IA64) 00074 #define ZENLIB_NO_WIN9X_SUPPORT 00075 #endif 00076 00077 //--------------------------------------------------------------------------- 00078 //Unix (Linux, HP, Sun, BeOS...) 00079 #if defined(UNIX) || defined(_UNIX) || defined(__UNIX__) \ 00080 || defined(__unix) || defined(__unix__) \ 00081 || defined(____SVR4____) || defined(__LINUX__) || defined(__sgi) \ 00082 || defined(__hpux) || defined(sun) || defined(__SUN__) || defined(_AIX) \ 00083 || defined(__EMX__) || defined(__VMS) || defined(__BEOS__) 00084 #ifndef UNIX 00085 #define UNIX 00086 #endif 00087 #ifndef _UNIX 00088 #define _UNIX 00089 #endif 00090 #ifndef __UNIX__ 00091 #define __UNIX__ 1 00092 #endif 00093 #endif 00094 00095 //--------------------------------------------------------------------------- 00096 //MacOS Classic 00097 #if defined(macintosh) 00098 #ifndef MACOS 00099 #define MACOS 00100 #endif 00101 #ifndef _MACOS 00102 #define _MACOS 00103 #endif 00104 #ifndef __MACOS__ 00105 #define __MACOS__ 1 00106 #endif 00107 #endif 00108 00109 //--------------------------------------------------------------------------- 00110 //MacOS X 00111 #if defined(__APPLE__) && defined(__MACH__) 00112 #ifndef MACOSX 00113 #define MACOSX 00114 #endif 00115 #ifndef _MACOSX 00116 #define _MACOSX 00117 #endif 00118 #ifndef __MACOSX__ 00119 #define __MACOSX__ 1 00120 #endif 00121 #endif 00122 00123 //Test of targets 00124 #if defined(WINDOWS) && defined(UNIX) && defined(MACOS) && defined(MACOSX) 00125 #pragma message Multiple platforms??? 00126 #endif 00127 00128 #if !defined(WIN32) && !defined(UNIX) && !defined(MACOS) && !defined(MACOSX) 00129 #pragma message No known platforms, assume default 00130 #endif 00131 00132 //*************************************************************************** 00133 // Internationnal 00134 //*************************************************************************** 00135 00136 //--------------------------------------------------------------------------- 00137 //Unicode 00138 #if defined(_UNICODE) || defined(UNICODE) || defined(__UNICODE__) 00139 #ifndef _UNICODE 00140 #define _UNICODE 00141 #endif 00142 #ifndef UNICODE 00143 #define UNICODE 00144 #endif 00145 #ifndef __UNICODE__ 00146 #define __UNICODE__ 1 00147 #endif 00148 #endif 00149 00150 //--------------------------------------------------------------------------- 00151 //wchar_t stuff 00152 #if defined(MACOS) || defined(MACOSX) 00153 #include <wchar.h> 00154 #endif 00155 00156 //*************************************************************************** 00157 // Compiler bugs/unuseful warning 00158 //*************************************************************************** 00159 00160 //MSVC6 : for(int t=0; t<10; ++t) { do something }; for(int t=0; t<10; ++t) { do something } 00161 #if defined(_MSC_VER) && _MSC_VER <= 1200 00162 #define for if(true)for 00163 #pragma warning(disable:4786) // MSVC6 doesn't like typenames longer than 255 chars (which generates an enormous amount of warnings). 00164 #endif 00165 00166 //MSVC2005 : "deprecated" warning (replacement functions are not in MinGW32 or Borland!) 00167 #if defined(_MSC_VER) && _MSC_VER >= 1400 00168 #pragma warning(disable : 4996) 00169 #endif 00170 00171 //*************************************************************************** 00172 // (Without Namespace) 00173 //*************************************************************************** 00174 00175 //--------------------------------------------------------------------------- 00176 #include <limits.h> 00177 00178 //--------------------------------------------------------------------------- 00179 #if defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG)) 00180 #include "ZenLib/MemoryDebug.h" 00181 #endif // defined(ZENLIB_DEBUG) && (defined(DEBUG) || defined(_DEBUG)) 00182 00183 //*************************************************************************** 00184 // Compiler helpers 00185 //*************************************************************************** 00186 00187 //--------------------------------------------------------------------------- 00188 //Macro to cut down on compiler warnings 00189 #ifndef UNUSED 00190 #define UNUSED(Identifier) 00191 #endif 00192 //--------------------------------------------------------------------------- 00193 //If we need size_t specific integer conversion 00194 #if !defined(SIZE_T_IS_LONG) && (defined(__LP64__) || defined(MACOSX)) 00195 #define SIZE_T_IS_LONG 00196 #endif 00197 00198 //--------------------------------------------------------------------------- 00199 //(-1) is known to be the MAX of an unsigned int but GCC complains about it 00200 #include <new> 00201 #include <cstring> //size_t 00202 namespace ZenLib 00203 { 00204 const std::size_t Error=((std::size_t)(-1)); 00205 const std::size_t All=((std::size_t)(-1)); 00206 const std::size_t Unlimited=((std::size_t)(-1)); 00207 } 00208 00209 //*************************************************************************** 00210 // (With namespace) 00211 //*************************************************************************** 00212 00213 namespace ZenLib 00214 { 00215 00216 //*************************************************************************** 00217 // International 00218 //*************************************************************************** 00219 00220 //--------------------------------------------------------------------------- 00221 //Char types 00222 #undef _T 00223 #define _T(__x) __T(__x) 00224 #undef _TEXT 00225 #define _TEXT(__x) __T(__x) 00226 #undef __TEXT 00227 #define __TEXT(__x) __T(__x) 00228 #if defined(__UNICODE__) 00229 #if defined (_MSC_VER) && !defined (_NATIVE_WCHAR_T_DEFINED) 00230 #pragma message Native wchar_t is not defined, not tested, you should put /Zc:wchar_t in compiler options 00231 #endif 00232 typedef wchar_t Char; 00233 #undef __T 00234 #define __T(__x) L##__x 00235 #else // defined(__UNICODE__) 00236 typedef char Char; 00237 #undef __T 00238 #define __T(__x) __x 00239 #endif // defined(__UNICODE__) 00240 #ifdef wchar_t 00241 typedef wchar_t wchar; 00242 #endif // wchar_t 00243 00244 //*************************************************************************** 00245 // Platform differences 00246 //*************************************************************************** 00247 00248 //End of line 00249 extern const Char* EOL; 00250 extern const Char PathSeparator; 00251 00252 //*************************************************************************** 00253 // Types 00254 //*************************************************************************** 00255 00256 //--------------------------------------------------------------------------- 00257 //int 00258 typedef signed int ints; 00259 typedef unsigned int intu; 00260 00261 //--------------------------------------------------------------------------- 00262 //8-bit int 00263 #if UCHAR_MAX==0xff 00264 #undef MAXTYPE_INT 00265 #define MAXTYPE_INT 8 00266 typedef signed char int8s; 00267 typedef unsigned char int8u; 00268 #else 00269 #pragma message This machine has no 8-bit integertype? 00270 #endif 00271 00272 //--------------------------------------------------------------------------- 00273 //16-bit int 00274 #if UINT_MAX == 0xffff 00275 #undef MAXTYPE_INT 00276 #define MAXTYPE_INT 16 00277 typedef signed int int16s; 00278 typedef unsigned int int16u; 00279 #elif USHRT_MAX == 0xffff 00280 #undef MAXTYPE_INT 00281 #define MAXTYPE_INT 16 00282 typedef signed short int16s; 00283 typedef unsigned short int16u; 00284 #else 00285 #pragma message This machine has no 16-bit integertype? 00286 #endif 00287 00288 //--------------------------------------------------------------------------- 00289 //32-bit int 00290 #if UINT_MAX == 0xfffffffful 00291 #undef MAXTYPE_INT 00292 #define MAXTYPE_INT 32 00293 typedef signed int int32s; 00294 typedef unsigned int int32u; 00295 #elif ULONG_MAX == 0xfffffffful 00296 #undef MAXTYPE_INT 00297 #define MAXTYPE_INT 32 00298 typedef signed long int32s; 00299 typedef unsigned long int32u; 00300 #elif USHRT_MAX == 0xfffffffful 00301 #undef MAXTYPE_INT 00302 #define MAXTYPE_INT 32 00303 typedef signed short int32s; 00304 typedef unsigned short int32u; 00305 #else 00306 #pragma message This machine has no 32-bit integer type? 00307 #endif 00308 00309 //--------------------------------------------------------------------------- 00310 //64-bit int 00311 #if defined(__MINGW32__) || defined(__CYGWIN32__) || defined(__UNIX__) || defined(__MACOSX__) 00312 #undef MAXTYPE_INT 00313 #define MAXTYPE_INT 64 00314 typedef signed long long int64s; 00315 typedef unsigned long long int64u; 00316 #elif defined(__WIN32__) 00317 #undef MAXTYPE_INT 00318 #define MAXTYPE_INT 64 00319 typedef signed __int64 int64s; 00320 typedef unsigned __int64 int64u; 00321 #else 00322 #pragma message This machine has no 64-bit integer type? 00323 #endif 00324 00325 //--------------------------------------------------------------------------- 00326 //32-bit float 00327 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00328 #undef MAXTYPE_FLOAT 00329 #define MAXTYPE_FLOAT 32 00330 typedef float float32; 00331 #else 00332 #pragma message This machine has no 32-bit float type? 00333 #endif 00334 00335 //--------------------------------------------------------------------------- 00336 //64-bit float 00337 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00338 #undef MAXTYPE_FLOAT 00339 #define MAXTYPE_FLOAT 64 00340 typedef double float64; 00341 #else 00342 #pragma message This machine has no 64-bit float type? 00343 #endif 00344 00345 //--------------------------------------------------------------------------- 00346 //80-bit float 00347 #if defined(WINDOWS) || defined(UNIX) || defined(MACOSX) 00348 #undef MAXTYPE_FLOAT 00349 #define MAXTYPE_FLOAT 80 00350 typedef long double float80; 00351 #else 00352 #pragma message This machine has no 80-bit float type? 00353 #endif 00354 00355 //*************************************************************************** 00356 // Nested functions 00357 //*************************************************************************** 00358 00359 //Unices 00360 #if defined (UNIX) 00361 #define snwprintf swprintf 00362 #endif 00363 00364 //Windows - MSVC 00365 #if defined (_MSC_VER) 00366 #define snprintf _snprintf 00367 #define snwprintf _snwprintf 00368 #endif 00369 00370 } //namespace 00371 #endif 00372