1 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2 /**
3  *	Contains preprocessor stuff. This should be the first included header.
4  *	\file		IcePreprocessor.h
5  *	\author		Pierre Terdiman
6  *	\date		April, 4, 2000
7  */
8 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
9 
10 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11 // Include Guard
12 #ifndef __ICEPREPROCESSOR_H__
13 #define __ICEPREPROCESSOR_H__
14 
15 	// Check platform
16 	#if defined( _WIN32 ) || defined( WIN32 )
17 		// #pragma message("Compiling on Windows...")
18 		#define PLATFORM_WINDOWS
19 	#else
20 		// don't issue pragmas on unknown platforms
21 		// #pragma message("Compiling on unknown platform...")
22 	#endif
23 
24 	// Check compiler
25 	#if defined(_MSC_VER)
26 		// #pragma message("Compiling with VC++...")
27 		#define COMPILER_VISUAL_CPP
28 	#else
29 		// don't issue pragmas on unknown platforms
30 		// #pragma message("Compiling with unknown compiler...")
31 	#endif
32 
33 	// Check compiler options. If this file is included in user-apps, this
34 	// shouldn't be needed, so that they can use what they like best.
35 	#ifndef ICE_DONT_CHECK_COMPILER_OPTIONS
36 		#ifdef COMPILER_VISUAL_CPP
37 			#if defined(_CHAR_UNSIGNED)
38 			#endif
39 
40 			#if defined(_CPPRTTI)
41 				#error Please disable RTTI...
42 			#endif
43 
44 			#if defined(_CPPUNWIND)
45 				#error Please disable exceptions...
46 			#endif
47 
48 			#if defined(_MT)
49 				// Multithreading
50 			#endif
51 		#endif
52 	#endif
53 
54 	// Check debug mode
55 	#ifdef	DEBUG			// May be defined instead of _DEBUG. Let's fix it.
56 		#ifndef	_DEBUG
57 			#define _DEBUG
58 		#endif
59 	#endif
60 
61 	#ifdef  _DEBUG
62 	// Here you may define items for debug builds
63 	#endif
64 
65 	#ifndef THIS_FILE
66 		#define THIS_FILE			__FILE__
67 	#endif
68 
69 	#ifndef ICE_NO_DLL
70 		#ifdef ICECORE_EXPORTS
71 			#define ICECORE_API			__declspec(dllexport)
72 		#else
73 			#define ICECORE_API			__declspec(dllimport)
74 		#endif
75 	#else
76 			#define ICECORE_API
77 	#endif
78 
79 	// Don't override new/delete
80 //	#define DEFAULT_NEWDELETE
81 	#define DONT_TRACK_MEMORY_LEAKS
82 
83 	#define FUNCTION				extern "C"
84 
85 	// Cosmetic stuff [mainly useful with multiple inheritance]
86 	#define	override(base_class)	virtual
87 
88 	// Our own inline keyword, so that:
89 	// - we can switch to __forceinline to check it's really better or not
90 	// - we can remove __forceinline if the compiler doesn't support it
91 //	#define inline_				__forceinline
92 //	#define inline_				inline
93 
94 	// Contributed by Bruce Mitchener
95 		#if defined(COMPILER_VISUAL_CPP)
96 			#define inline_			__forceinline
97 //			#define inline_			inline
98 		#elif defined(__GNUC__) && __GNUC__ < 3
99 			#define inline_ inline
100 		#elif defined(__GNUC__)
101 			#define inline_ inline __attribute__ ((always_inline))
102 		#else
103 			#define inline_ inline
104 		#endif
105 
106 	// Down the hatch
107 #ifdef _MSC_VER
108 	#pragma inline_depth( 255 )
109 #endif
110 
111 	#ifdef COMPILER_VISUAL_CPP
112 		#pragma intrinsic(memcmp)
113 		#pragma intrinsic(memcpy)
114 		#pragma intrinsic(memset)
115 		#pragma intrinsic(strcat)
116 		#pragma intrinsic(strcmp)
117 		#pragma intrinsic(strcpy)
118 		#pragma intrinsic(strlen)
119 		#pragma intrinsic(abs)
120 		#pragma intrinsic(labs)
121 	#endif
122 
123 	// ANSI compliance
124 	#ifdef  _DEBUG
125 		// Remove painful warning in debug
__False__()126 		inline_ bool __False__(){ return false; }
127 		#define for if(__False__()){}	else for
128 	#else
129 		#define for if(0){}	else for
130 	#endif
131 
132 #endif // __ICEPREPROCESSOR_H__
133