home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 May / PCWorld_2001-05_cd.bin / Software / Vyzkuste / devc / _SETUP.6 / Group14 / stl_config.h < prev    next >
C/C++ Source or Header  |  2000-01-21  |  12KB  |  360 lines

  1. /*
  2.  *
  3.  * Copyright (c) 1994
  4.  * Hewlett-Packard Company
  5.  *
  6.  * Permission to use, copy, modify, distribute and sell this software
  7.  * and its documentation for any purpose is hereby granted without fee,
  8.  * provided that the above copyright notice appear in all copies and
  9.  * that both that copyright notice and this permission notice appear
  10.  * in supporting documentation.  Hewlett-Packard Company makes no
  11.  * representations about the suitability of this software for any
  12.  * purpose.  It is provided "as is" without express or implied warranty.
  13.  *
  14.  * Copyright (c) 1997
  15.  * Silicon Graphics
  16.  *
  17.  * Permission to use, copy, modify, distribute and sell this software
  18.  * and its documentation for any purpose is hereby granted without fee,
  19.  * provided that the above copyright notice appear in all copies and
  20.  * that both that copyright notice and this permission notice appear
  21.  * in supporting documentation.  Silicon Graphics makes no
  22.  * representations about the suitability of this software for any
  23.  * purpose.  It is provided "as is" without express or implied warranty.
  24.  *
  25.  */
  26.  
  27. #ifndef __STL_CONFIG_H
  28. # define __STL_CONFIG_H
  29.  
  30. // Flags:
  31. // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
  32. //   type.
  33. // * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
  34. // * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48
  35. //   function.
  36. // * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
  37. //   static members of template classes.
  38. // * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
  39. //   partial specialization of template classes.
  40. // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler
  41. //   supports partial specialization syntax for full specialization of
  42. //   class templates.  (Even if it doesn't actually support partial
  43. //   specialization itself.)
  44. // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
  45. //   partial ordering of function templates.  (a.k.a partial specialization
  46. //   of function templates.)
  47. // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
  48. //   member functions of classes.
  49. // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports
  50. //   nested classes that are member templates of other classes.
  51. // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler
  52. //   supports calling a function template by providing its template
  53. //   arguments explicitly.
  54. // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
  55. //   to handle default template parameters that depend on previous template
  56. //   parameters.
  57. // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
  58. //   function template argument deduction for non-type template parameters.
  59. // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
  60. //   to support the -> operator for iterators.
  61. // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
  62. //   mode) supports exceptions.
  63. // * __STL_USE_NAMESPACES: defined if the compiler has the necessary
  64. //   support for namespaces.
  65. // * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a
  66. //   standard-conforming header <exception>.
  67. // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
  68. //   system in multithreaded mode, using native SGI threads instead of
  69. //   pthreads.
  70. // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
  71. //   compiler in multithreaded mode.
  72. // * __STL_LONG_LONG if the compiler has long long and unsigned long long
  73. //   types.  (They're not in the C++ standard, but they are expected to be
  74. //   included in the forthcoming C9X standard.)
  75.  
  76.  
  77. // User-settable macros that control compilation:
  78. // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
  79. //   SGI-style allocators, instead of standard-conforming allocators,
  80. //   even if the compiler supports all of the language features needed
  81. //   for standard-conforming allocators.
  82. // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
  83. //   std, even if the compiler supports namespaces.
  84. // * __STL_ASSERTIONS: if defined, then enable runtime checking through the
  85. //   __stl_assert macro.
  86. // * _PTHREADS: if defined, use Posix threads for multithreading support.
  87. // * _NOTHREADS: if defined, don't use any multithreading support.
  88.  
  89.  
  90. // Other macros defined by this file:
  91.  
  92. // * bool, true, and false, if __STL_NO_BOOL is defined.
  93. // * typename, as a null macro if it's not already a keyword.
  94. // * explicit, as a null macro if it's not already a keyword.
  95. // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
  96. // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
  97. // * __stl_assert, either as a test or as a null macro, depending on
  98. //   whether or not __STL_ASSERTIONS is defined.
  99.  
  100. #ifdef _PTHREADS
  101. #   define __STL_PTHREADS
  102. #endif
  103. #ifdef _SOLTHREADS
  104. #   define __STL_SOLTHREADS
  105. #endif
  106.  
  107. # if defined(__sgi) && !defined(__GNUC__)
  108. #   if !defined(_BOOL)
  109. #     define __STL_NO_BOOL
  110. #   endif
  111. #   if defined(_WCHAR_T_IS_KEYWORD)
  112. #     define __STL_HAS_WCHAR_T
  113. #   endif
  114. #   if !defined(_TYPENAME_IS_KEYWORD)
  115. #     define __STL_NEED_TYPENAME
  116. #   endif
  117. #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
  118. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  119. #   endif
  120. #   ifdef _MEMBER_TEMPLATES
  121. #     define __STL_MEMBER_TEMPLATES
  122. #     define __STL_MEMBER_TEMPLATE_CLASSES
  123. #   endif
  124. #   if defined(_MEMBER_TEMPLATE_KEYWORD)
  125. #     define __STL_MEMBER_TEMPLATE_KEYWORD
  126. #   endif
  127. #   if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
  128. #     define __STL_MEMBER_TEMPLATE_KEYWORD
  129. #   endif
  130. #   if !defined(_EXPLICIT_IS_KEYWORD)
  131. #     define __STL_NEED_EXPLICIT
  132. #   endif
  133. #   ifdef __EXCEPTIONS
  134. #     define __STL_USE_EXCEPTIONS
  135. #   endif
  136. #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
  137. #     define __STL_HAS_NAMESPACES
  138. #   endif
  139. #   if (_COMPILER_VERSION < 721)
  140. #     define __STL_NO_EXCEPTION_HEADER
  141. #   endif
  142. #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
  143. #     define __STL_SGI_THREADS
  144. #   endif
  145. #   if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
  146. #     define __STL_LONG_LONG
  147. #   endif
  148. # endif
  149.  
  150. # ifdef __GNUC__
  151. #   include <_G_config.h>
  152. #   define __STL_HAS_WCHAR_T
  153. #   if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
  154. #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
  155. #     define __STL_NEED_TYPENAME
  156. #     define __STL_NEED_EXPLICIT
  157. #   else
  158. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  159. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  160. #     define __STL_MEMBER_TEMPLATES
  161. #     define __STL_MEMBER_TEMPLATE_CLASSES
  162. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  163. #     define __STL_HAS_NAMESPACES
  164. #     define __STL_NO_NAMESPACES
  165. #     define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
  166. #     define __STL_USE_NAMESPACES
  167. #   endif
  168. #   if defined(__linux__)
  169.      /* glibc pre 2.0 is very buggy. We have to disable thread for it.
  170.         It should be upgraded to glibc 2.0 or later. */
  171. #    if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)
  172. #      define __STL_PTHREADS
  173. #      ifdef __STRICT_ANSI__
  174.          /* Work around a bug in the glibc 2.0.x pthread.h.  */
  175. #        define sigset_t __sigset_t
  176. #      endif
  177. #    endif
  178. #   endif
  179. #   ifdef __EXCEPTIONS
  180. #     define __STL_USE_EXCEPTIONS
  181. #   endif
  182. #   ifndef __STRICT_ANSI__
  183. #     define __STL_LONG_LONG
  184. #   endif
  185. # endif
  186.  
  187. # if defined(__SUNPRO_CC)
  188. #   define __STL_NO_BOOL
  189. #   define __STL_NEED_TYPENAME
  190. #   define __STL_NEED_EXPLICIT
  191. #   define __STL_USE_EXCEPTIONS
  192. # endif
  193.  
  194. # if defined(__COMO__)
  195. #   define __STL_MEMBER_TEMPLATES
  196. #   define __STL_MEMBER_TEMPLATE_CLASSES
  197. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  198. #   define __STL_USE_EXCEPTIONS
  199. #   define __STL_HAS_NAMESPACES
  200. # endif
  201.  
  202. # if defined(__MINGW32__)
  203. #   define __STL_NO_DRAND48
  204. #   ifdef _MT
  205. #     define __STL_WIN32THREADS
  206. #   endif
  207. # endif
  208.  
  209. # if defined(__CYGWIN__)
  210. #   define __STL_NO_DRAND48
  211. # endif
  212.  
  213. # if defined(_MSC_VER)
  214. #   define __STL_NO_DRAND48
  215. #   define __STL_NEED_TYPENAME
  216. #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
  217. #     define __STL_NEED_EXPLICIT
  218. #     define __STL_NO_BOOL
  219. #     if  _MSC_VER > 1000
  220. #       include <yvals.h>
  221. #       define __STL_DONT_USE_BOOL_TYPEDEF
  222. #     endif
  223. #   endif
  224. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  225. #   define __SGI_STL_NO_ARROW_OPERATOR
  226. #   ifdef _CPPUNWIND
  227. #     define __STL_USE_EXCEPTIONS
  228. #   endif
  229. #   ifdef _MT
  230. #     define __STL_WIN32THREADS
  231. #   endif
  232. #   if _MSC_VER >= 1200
  233. #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  234. #     define __STL_HAS_NAMESPACES
  235. #     define __STL_NO_NAMESPACES
  236. #   endif
  237. # endif
  238.  
  239. # if defined(__BORLANDC__)
  240. #   define __STL_NO_DRAND48
  241. #   define __STL_NEED_TYPENAME
  242. #   define __STL_LIMITED_DEFAULT_TEMPLATES
  243. #   define __SGI_STL_NO_ARROW_OPERATOR
  244. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  245. #   ifdef _CPPUNWIND
  246. #     define __STL_USE_EXCEPTIONS
  247. #   endif
  248. #   ifdef __MT__
  249. #     define __STL_WIN32THREADS
  250. #   endif
  251. # endif
  252.  
  253. # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
  254.     typedef int bool;
  255. #   define true 1
  256. #   define false 0
  257. # endif
  258.  
  259. # ifdef __STL_NEED_TYPENAME
  260. #   define typename
  261. # endif
  262.  
  263. # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
  264. #   define __STL_TEMPLATE template
  265. # else
  266. #   define __STL_TEMPLATE
  267. # endif
  268.  
  269. # ifdef __STL_NEED_EXPLICIT
  270. #   define explicit
  271. # endif
  272.  
  273. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  274. #   define __STL_NULL_TMPL_ARGS <>
  275. # else
  276. #   define __STL_NULL_TMPL_ARGS
  277. # endif
  278.  
  279. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
  280.      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
  281. #   define __STL_TEMPLATE_NULL template<>
  282. # else
  283. #   define __STL_TEMPLATE_NULL
  284. # endif
  285.  
  286. // Use standard-conforming allocators if we have the necessary language
  287. // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can
  288. // disable new-style allocators, and continue to use the same kind of
  289. // allocators as before, without having to edit library headers.
  290. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
  291.      defined(__STL_MEMBER_TEMPLATES) && \
  292.      defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
  293.     !defined(__STL_NO_BOOL) && \
  294.     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
  295.     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
  296.     !defined(__STL_USE_SGI_ALLOCATORS)
  297. #   define __STL_USE_STD_ALLOCATORS
  298. # endif
  299.  
  300. # ifndef __STL_DEFAULT_ALLOCATOR
  301. #   ifdef __STL_USE_STD_ALLOCATORS
  302. #     define __STL_DEFAULT_ALLOCATOR(T) allocator<T>
  303. #   else
  304. #     define __STL_DEFAULT_ALLOCATOR(T) alloc
  305. #   endif
  306. # endif
  307.  
  308. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
  309. // without having to edit library headers.
  310. # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
  311. #   define __STD std
  312. #   define __STL_BEGIN_NAMESPACE namespace std {
  313. #   define __STL_END_NAMESPACE }
  314. #   define __STL_USE_NAMESPACE_FOR_RELOPS
  315. #   define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
  316. #   define __STL_END_RELOPS_NAMESPACE }
  317. #   define __STD_RELOPS std
  318. #   define __STL_USE_NAMESPACES
  319. # else
  320. #   define __STD
  321. #   define __STL_BEGIN_NAMESPACE
  322. #   define __STL_END_NAMESPACE
  323. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
  324. #   define __STL_BEGIN_RELOPS_NAMESPACE
  325. #   define __STL_END_RELOPS_NAMESPACE
  326. #   define __STD_RELOPS
  327. #   undef  __STL_USE_NAMESPACES
  328. # endif
  329.  
  330. # ifdef __STL_USE_EXCEPTIONS
  331. #   define __STL_TRY try
  332. #   define __STL_CATCH_ALL catch(...)
  333. #   define __STL_THROW(x) throw x
  334. #   define __STL_RETHROW throw
  335. #   define __STL_NOTHROW throw()
  336. #   define __STL_UNWIND(action) catch(...) { action; throw; }
  337. # else
  338. #   define __STL_TRY
  339. #   define __STL_CATCH_ALL if (false)
  340. #   define __STL_THROW(x)
  341. #   define __STL_RETHROW
  342. #   define __STL_NOTHROW
  343. #   define __STL_UNWIND(action)
  344. # endif
  345.  
  346. #ifdef __STL_ASSERTIONS
  347. # include <stdio.h>
  348. # define __stl_assert(expr) \
  349.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
  350.               __FILE__, __LINE__, # expr); abort(); }
  351. #else
  352. # define __stl_assert(expr)
  353. #endif
  354.  
  355. #endif /* __STL_CONFIG_H */
  356.  
  357. // Local Variables:
  358. // mode:C++
  359. // End:
  360.