OGRE  1.9
Object-Oriented Graphics Rendering Engine
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
OgreStdHeaders.h
Go to the documentation of this file.
1 #ifndef __StdHeaders_H__
2 #define __StdHeaders_H__
3 
4 #ifdef __BORLANDC__
5  #define __STD_ALGORITHM
6 #endif
7 
8 #if defined ( OGRE_GCC_VISIBILITY ) && ((OGRE_PLATFORM == OGRE_PLATFORM_APPLE && !__LP64__) && OGRE_PLATFORM != OGRE_PLATFORM_APPLE_IOS)
9 /* Until libstdc++ for gcc 4.2 is released, we have to declare all
10  * symbols in libstdc++.so externally visible, otherwise we end up
11  * with them marked as hidden by -fvisible=hidden.
12  *
13  * See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20218
14  *
15  * Due to a more strict linker included with Xcode 4, this is disabled on Mac OS X and iOS.
16  * The reason? It changes the visibility of Boost functions. The mismatch between visibility Boost when used in Ogre (default)
17  * and Boost when compiled (hidden) results in mysterious link errors such as "Bad codegen, pointer diff".
18  */
19 # pragma GCC visibility push(default)
20 #endif
21 
22 #include <cassert>
23 #include <cstdio>
24 #include <cstdlib>
25 #include <ctime>
26 #include <cstring>
27 #include <cstdarg>
28 #include <cmath>
29 
30 // STL containers
31 #include <vector>
32 #include <map>
33 #include <string>
34 #include <set>
35 #include <list>
36 #include <deque>
37 #include <queue>
38 #include <bitset>
39 
40 // Note - not in the original STL, but exists in SGI STL and STLport
41 // For gcc 4.3 see http://gcc.gnu.org/gcc-4.3/changes.html
42 #if (OGRE_COMPILER == OGRE_COMPILER_GNUC) && !defined(STLPORT)
43 # if OGRE_COMP_VER >= 430
44 # include <tr1/unordered_map>
45 # include <tr1/unordered_set>
46 # else
47 # include <ext/hash_map>
48 # include <ext/hash_set>
49 # endif
50 #elif (OGRE_COMPILER == OGRE_COMPILER_CLANG)
51 # if defined(_LIBCPP_VERSION)
52 # include <unordered_map>
53 # include <unordered_set>
54 # else
55 # include <tr1/unordered_map>
56 # include <tr1/unordered_set>
57 # endif
58 #elif !defined(STLPORT)
59 # if (OGRE_COMPILER == OGRE_COMPILER_MSVC) && _MSC_FULL_VER >= 150030729 // VC++ 9.0 SP1+
60 # include <unordered_map>
61 # include <unordered_set>
62 # elif OGRE_THREAD_PROVIDER == 1
63 # include <boost/unordered_map.hpp>
64 # include <boost/unordered_set.hpp>
65 # else
66 # error "Your compiler doesn't support unordered_set and unordered_map. Try to compile Ogre with Boost or STLPort."
67 # endif
68 #endif
69 
70 // STL algorithms & functions
71 #include <algorithm>
72 #include <functional>
73 #include <limits>
74 
75 // C++ Stream stuff
76 #include <fstream>
77 #include <iostream>
78 #include <iomanip>
79 #include <sstream>
80 
81 #ifdef __BORLANDC__
82 namespace Ogre
83 {
84  using namespace std;
85 }
86 #endif
87 
88 extern "C" {
89 
90 # include <sys/types.h>
91 # include <sys/stat.h>
92 
93 }
94 
95 #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WINRT
96 # undef min
97 # undef max
98 # if defined( __MINGW32__ )
99 # include <unistd.h>
100 # endif
101 #endif
102 
103 #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX || OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
104 extern "C" {
105 
106 # include <unistd.h>
107 # include <dlfcn.h>
108 
109 }
110 #endif
111 
112 #if OGRE_PLATFORM == OGRE_PLATFORM_APPLE || OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS
113 extern "C" {
114 # include <unistd.h>
115 # include <sys/param.h>
116 # include <CoreFoundation/CoreFoundation.h>
117 }
118 #endif
119 
120 #if defined ( OGRE_GCC_VISIBILITY ) && ((OGRE_PLATFORM == OGRE_PLATFORM_APPLE && !__LP64__) && OGRE_PLATFORM != OGRE_PLATFORM_APPLE_IOS)
121 # pragma GCC visibility pop
122 #endif
123 #endif