a29415d63b15325b45c0ac4ffe5a57d4ac7402a4
[reactos.git] / sdk / include / c++ / stlport / stl / config / _reactos.h
1 /*
2 * Copyright (c) 2010
3 * Jérôme Gardou
4 *
5 *
6 * This material is provided "as is", with absolutely no warranty expressed
7 * or implied. Any use is at your own risk.
8 *
9 * This file is in public domain.
10 */
11
12 /*
13 * Purpose of this file :
14 *
15 * A list of COMPILER-SPECIFIC portion of STLport settings.
16 * This file is provided to help in manual configuration
17 * of STLport. This file is being included by stlcomp.h
18 * when STLport is unable to identify your compiler.
19 * Please remove the error diagnostic below before adjusting
20 * macros.
21 *
22 */
23 #ifndef _STLP_REACTOS_H
24 #define _STLP_REACTOS_H
25
26 #if !defined (_STLP_COMPILER)
27 # ifdef _MSC_VER
28 # define _STLP_COMPILER "Microsoft Visual Studio C++"
29 # define _STLP_MSVC _MSC_VER
30 # define _STLP_MSVC_LIB _MSC_VER
31 # elif defined __MINGW32__
32 # define _STLP_COMPILER "gcc"
33 # else
34 # error "Unrecognized compiler for reactos!"
35 # endif
36 #endif
37
38 // We are WIN32
39 #define _STLP_WIN32
40
41 // We declspec
42 #define _STLP_IMPORT_DECLSPEC __declspec(dllimport)
43 #define _STLP_EXPORT_DECLSPEC __declspec(dllexport)
44
45 //==========================================================
46
47 // the values choosen here as defaults try to give
48 // maximum functionality on the most conservative settings
49
50 // Mostly correct guess, change it for Alpha (and other environments
51 // that has 64-bit "long")
52 # define _STLP_UINT32_T unsigned __int32
53
54 // Disables wchar_t functionality
55 // # define _STLP_NO_WCHAR_T 1
56
57 // Define if wchar_t is not an intrinsic type, and is actually a typedef to unsigned short.
58 // # define _STLP_WCHAR_T_IS_USHORT 1
59
60 // Uncomment if long long is available
61 # define _STLP_LONG_LONG __int64
62 // Uncomment if long double is not available
63 // # define _STLP_NO_LONG_DOUBLE 1
64
65 // Uncomment this if your compiler does not support "typename" keyword
66 // # define _STLP_NEED_TYPENAME 1
67
68 // Uncomment this if your compiler does not support "mutable" keyword
69 // # define _STLP_NEED_MUTABLE 1
70
71 // Uncomment this if your compiler does not support "explicit" keyword
72 // # define _STLP_NEED_EXPLICIT 1
73
74 // Uncomment if new-style-casts like const_cast<> are not available
75 // # define _STLP_NO_NEW_STYLE_CASTS 1
76
77 // Uncomment this if your compiler does not have "bool" type
78 // # define _STLP_NO_BOOL 1
79
80 // Uncomment this if your compiler does not have "bool" type, but has "bool" keyword reserved
81 // # define _STLP_DONT_USE_BOOL_TYPEDEF 1
82
83 // Uncomment this if your compiler does not have "bool" type, but defines "bool" in <yvals.h>
84 // # define _STLP_YVALS_H 1
85
86 // Uncomment this if your compiler has limited or no default template arguments for classes
87 // # define _STLP_LIMITED_DEFAULT_TEMPLATES 1
88
89 // Uncomment this if your compiler support only complete (not dependent on other parameters)
90 // types as default parameters for class templates
91 // # define _STLP_DEFAULT_TYPE_PARAM 1
92
93 // Uncomment this if your compiler do not support default parameters in template class methods
94 // # define _STLP_DONT_SUP_DFLT_PARAM 1
95
96 // Uncomment this if your compiler has problem with not-type
97 // default template parameters
98 // # define _STLP_NO_DEFAULT_NON_TYPE_PARAM 1
99
100 // Define if compiler has
101 // trouble with functions getting non-type-parameterized classes as parameters
102 // # define _STLP_NON_TYPE_TMPL_PARAM_BUG 1
103
104 // Uncomment this if your compiler does not support namespaces
105 // # define _STLP_HAS_NO_NAMESPACES 1
106
107 // Uncomment if "using" keyword does not work with template types
108 // # define _STLP_BROKEN_USING_DIRECTIVE 1
109
110 // Uncomment this if your compiler does not support exceptions
111 // # define _STLP_HAS_NO_EXCEPTIONS 1
112
113 // Uncomment this when you are able to detect that the user do not
114 // want to use the exceptions feature.
115 // # define _STLP_DONT_USE_EXCEPTIONS 1
116
117 // Uncomment this if your compiler does not support exception specifications
118 // # define _STLP_NO_EXCEPTION_SPEC
119
120 // Define this if your compiler requires return statement after throw()
121 // # define _STLP_THROW_RETURN_BUG 1
122
123 // Define this if your compiler do not support return of void
124 // # define _STLP_DONT_RETURN_VOID 1
125
126 // Header <new> that comes with the compiler
127 // does not define bad_alloc exception
128 // # define _STLP_NO_BAD_ALLOC 1
129
130 // Define this if your compiler do not throw bad_alloc from the new operator
131 // # define _STLP_NEW_DONT_THROW_BAD_ALLOC 1
132
133 // Define this if your compiler has no rtti support or if it has been disabled
134 // # define _STLP_NO_RTTI 1
135
136 // Define this if there is no native type_info definition
137 # define _STLP_NO_TYPEINFO 1
138
139 // Uncomment if member template methods are not available
140 // # define _STLP_NO_MEMBER_TEMPLATES 1
141
142 // Uncomment if member template classes are not available
143 // # define _STLP_NO_MEMBER_TEMPLATE_CLASSES 1
144
145 // Uncomment if your compiler do not support the std::allocator rebind technique
146 // This is a special case of bad member template classes support, it is automatically
147 // defined if _STLP_NO_MEMBER_TEMPLATE_CLASSES is defined.
148 // # define _STLP_DONT_SUPPORT_REBIND_MEMBER_TEMPLATE 1
149
150 // Uncomment if no "template" keyword should be used with member template classes
151 // # define _STLP_NO_MEMBER_TEMPLATE_KEYWORD 1
152
153 // Compiler does not accept friend declaration qualified with namespace name.
154 // # define _STLP_NO_QUALIFIED_FRIENDS 1
155
156 // Uncomment if partial specialization is not available
157 // # define _STLP_NO_CLASS_PARTIAL_SPECIALIZATION 1
158
159 // Define if class being partially specialized require full name (template parameters)
160 // of itself for method declarations
161 // # define _STLP_PARTIAL_SPEC_NEEDS_TEMPLATE_ARGS
162
163 // Compiler has problem with qualified specializations (cont int, volatile int...)
164 // # define _STLP_QUALIFIED_SPECIALIZATION_BUG
165
166 // Compiler has problems specializing members of partially
167 // specialized class
168 // # define _STLP_MEMBER_SPECIALIZATION_BUG
169
170 // Uncomment if partial order of template functions is not available
171 // # define _STLP_NO_FUNCTION_TMPL_PARTIAL_ORDER 1
172
173 // Uncomment if specialization of methods is not allowed
174 // # define _STLP_NO_METHOD_SPECIALIZATION 1
175
176 // Uncomment if full specialization does not use partial spec. syntax : template <> struct ....
177 // # define _STLP_NO_PARTIAL_SPECIALIZATION_SYNTAX 1
178
179 // Uncomment if compiler does not support explicit template arguments for functions
180 // # define _STLP_NO_EXPLICIT_FUNCTION_TMPL_ARGS
181
182 // Uncomment this if your compiler can't inline while(), for()
183 // # define _STLP_LOOP_INLINE_PROBLEMS 1
184
185 // Define if the compiler fails to match a template function argument of base
186 // # define _STLP_BASE_MATCH_BUG 1
187
188 // Define if the compiler fails to match a template function argument of base
189 // (non-template)
190 //# define _STLP_NONTEMPL_BASE_MATCH_BUG 1
191
192 // Define if the compiler rejects outline method definition
193 // explicitly taking nested types/typedefs
194 // # define _STLP_NESTED_TYPE_PARAM_BUG 1
195
196 // Compiler requires typename keyword on outline method definition
197 // explicitly taking nested types/typedefs
198 // #define _STLP_TYPENAME_ON_RETURN_TYPE
199
200 // Define if the baseclass typedefs not visible from outside
201 // # define _STLP_BASE_TYPEDEF_OUTSIDE_BUG 1
202
203 // if your compiler have serious problems with typedefs, try this one
204 // # define _STLP_BASE_TYPEDEF_BUG 1
205
206 // Uncomment if getting errors compiling mem_fun* adaptors
207 // # define _STLP_MEMBER_POINTER_PARAM_BUG 1
208
209 // Uncomment if the compiler can't handle a constant-initializer in the
210 // declaration of a static const data member of integer type.
211 // (See section 9.4.2, paragraph 4, of the C++ standard.)
212 // # define _STLP_STATIC_CONST_INIT_BUG
213
214 // Uncomment to indicate that the compiler do not like static constant
215 // definition.
216 // Meaningfull only if _STLP_STATIC_CONST_INIT_BUG is not defined.
217 # define _STLP_NO_STATIC_CONST_DEFINITION
218
219 // Define if default constructor for builtin integer type fails to initialize it to 0
220 // In expression like new(&char) char():
221 //# define _STLP_DEF_CONST_PLCT_NEW_BUG 1
222 // In default function parameter like _M_method(_Tp __x = _Tp())
223 //# define _STLP_DEF_CONST_DEF_PARAM_BUG 1
224
225 // Defined if constructor
226 // required to explicitly call member's default constructors for const objects
227 // # define _STLP_CONST_CONSTRUCTOR_BUG 1
228
229 // Defined if the compiler has trouble calling POD-types constructors/destructors
230 // # define _STLP_TRIVIAL_CONSTRUCTOR_BUG 1
231 // # define _STLP_TRIVIAL_DESTRUCTOR_BUG 1
232
233 // Define if having problems specializing maps/sets with
234 // key type being const
235 // # define _STLP_MULTI_CONST_TEMPLATE_ARG_BUG
236
237 // Uncomment this to disable -> operators on all iterators
238 // # define _STLP_NO_ARROW_OPERATOR 1
239
240 // Uncomment this to disble at() member functions for containers
241 // # define _STLP_NO_AT_MEMBER_FUNCTION 1
242
243 // Define this if compiler lacks <exception> header
244 // # define _STLP_NO_EXCEPTION_HEADER 1
245
246 // Uncomment this if your C library has lrand48() function
247 // # define _STLP_RAND48 1
248
249 // Uncomment if native new-style C library headers lile <cstddef>, etc are not available.
250 // # define _STLP_HAS_NO_NEW_C_HEADERS 1
251
252 // uncomment if new-style headers <new> is available
253 // # define _STLP_HAS_NEW_NEW_HEADER 1
254
255 // uncomment this if <iostream> and other STD headers put their stuff in ::namespace,
256 // not std::
257 // # define _STLP_VENDOR_GLOBAL_STD
258
259 // uncomment this if <cstdio> and the like put stuff in ::namespace,
260 // not std::
261 // # define _STLP_VENDOR_GLOBAL_CSTD
262
263 // uncomment this if your compiler consider as ambiguous a function imported within
264 // the stlport namespace and called without scope (:: or std::)
265 // # define _STLP_NO_USING_FOR_GLOBAL_FUNCTIONS 1
266
267 // uncomment this if your compiler define all the C math functions C++ additional
268 // overloads in ::namespace and not only in std::.
269 // # define _STLP_HAS_GLOBAL_C_MATH_FUNCTIONS 1
270
271 #define MKSTRING_(a) #a
272 #define MKSTRING(a) MKSTRING_(a)
273 #define _STLP_NATIVE_C_HEADER(header) MKSTRING(NATIVE_C_INCLUDE/header)
274 #define _STLP_NATIVE_CPP_C_HEADER(header) MKSTRING(NATIVE_CPP_INCLUDE/header)
275 #define _STLP_NATIVE_CPP_RUNTIME_HEADER(header) MKSTRING(NATIVE_CPP_INCLUDE/header)
276
277
278 // This macro constructs header path from directory and name.
279 // You may change it if your compiler does not understand "/".
280
281 // This macro constructs native include header path from include path and name.
282 // You may have do define it if experimenting problems with preprocessor
283 // # define _STLP_NATIVE_HEADER(header) _STLP_MAKE_HEADER(_STLP_NATIVE_INCLUDE_PATH,header)
284
285 // Same for C headers
286 // #define _STLP_NATIVE_C_HEADER(header)
287
288 //==========================================================
289
290 // We have no llabs, lldiv, etc.
291 #define _STLP_NO_VENDOR_STDLIB_L
292
293 // new_handler is in global namespace
294 # define _STLP_GLOBAL_NEW_HANDLER
295
296 // terminate function is in global namespace
297 #define _STLP_VENDOR_TERMINATE_STD
298
299 // We don't want stlport to use its own namespace
300 #define _STLP_NO_OWN_NAMESPACE
301
302 // Calling convention
303 #define _STLP_CALL __cdecl
304
305 #ifdef _M_AMD64
306 #ifdef __cplusplus
307 extern "C" {
308 #endif
309 void * _InterlockedExchangePointer(void * volatile * Target, void * Value);
310 _STLP_IMPORT_DECLSPEC void* InterlockedFlushSList(void*);
311 _STLP_IMPORT_DECLSPEC void* InterlockedPopEntrySList(void*);
312 _STLP_IMPORT_DECLSPEC void* InterlockedPushEntrySList(void*, void*);
313 #ifdef __cplusplus
314 }
315 #endif
316
317 #ifdef _BUILD_STLPORT
318 #define InterlockedPopEntrySList(list) reinterpret_cast<_STLP_atomic_freelist::item*>(InterlockedPopEntrySList(list))
319 #define InterlockedFlushSList(list) reinterpret_cast<_STLP_atomic_freelist::item*>(InterlockedFlushSList(list))
320 #endif
321
322 #undef __cdecl__
323 #define __cdecl__
324 #endif /* _M_AMD64 */
325
326 // Include stlport windows specifics
327 #include "_windows.h"
328
329 #endif