stl_config.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:11k
源码类别:

3D图形编程

开发平台:

Visual C++

  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. #ifndef __STL_CONFIG_H
  27. # define __STL_CONFIG_H
  28. // Flags:
  29. // * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
  30. //   type.
  31. // * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
  32. // * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48 
  33. //   function.
  34. // * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
  35. //   static members of template classes.
  36. // * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
  37. //   partial specialization of template classes.
  38. // * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler 
  39. //   supports partial specialization syntax for full specialization of
  40. //   class templates.  (Even if it doesn't actually support partial 
  41. //   specialization itself.)
  42. // * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
  43. //   partial ordering of function templates.  (a.k.a partial specialization
  44. //   of function templates.)
  45. // * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
  46. //   member functions of classes.
  47. // * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports 
  48. //   nested classes that are member templates of other classes.
  49. // * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler 
  50. //   supports calling a function template by providing its template
  51. //   arguments explicitly.
  52. // * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
  53. //   to handle default template parameters that depend on previous template
  54. //   parameters.
  55. // * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
  56. //   function template argument deduction for non-type template parameters.
  57. // * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
  58. //   to support the -> operator for iterators.
  59. // * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
  60. //   mode) supports exceptions.
  61. // * __STL_USE_NAMESPACES: defined if the compiler has the necessary
  62. //   support for namespaces.
  63. // * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
  64. //   system in multithreaded mode, using native SGI threads instead of 
  65. //   pthreads.
  66. // * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
  67. //   compiler in multithreaded mode.
  68. // * __STL_LONG_LONG if the compiler has long long and unsigned long long
  69. //   types.  (They're not in the C++ standard, but they are expected to be 
  70. //   included in the forthcoming C9X standard.)
  71. // User-settable macros that control compilation:
  72. // * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
  73. //   SGI-style allocators, instead of standard-conforming allocators,
  74. //   even if the compiler supports all of the language features needed
  75. //   for standard-conforming allocators.
  76. // * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
  77. //   std, even if the compiler supports namespaces.
  78. // * __STL_ASSERTIONS: if defined, then enable runtime checking through the
  79. //   __stl_assert macro.
  80. // * _PTHREADS: if defined, use Posix threads for multithreading support.
  81. // * _NOTHREADS: if defined, don't use any multithreading support.  
  82. // Other macros defined by this file:
  83. // * bool, true, and false, if __STL_NO_BOOL is defined.
  84. // * typename, as a null macro if it's not already a keyword.
  85. // * explicit, as a null macro if it's not already a keyword.
  86. // * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
  87. // * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
  88. // * __stl_assert, either as a test or as a null macro, depending on
  89. //   whether or not __STL_ASSERTIONS is defined.
  90. # if defined(__sgi) && !defined(__GNUC__)
  91. #   if !defined(_BOOL)
  92. #     define __STL_NO_BOOL
  93. #   endif
  94. #   if defined(_WCHAR_T_IS_KEYWORD)
  95. #     define __STL_HAS_WCHAR_T 
  96. #   endif
  97. #   if !defined(_TYPENAME_IS_KEYWORD)
  98. #     define __STL_NEED_TYPENAME
  99. #   endif
  100. #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
  101. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  102. #   endif
  103. #   ifdef _MEMBER_TEMPLATES
  104. #     define __STL_MEMBER_TEMPLATES
  105. #     define __STL_MEMBER_TEMPLATE_CLASSES
  106. #   endif
  107. #   if defined(_MEMBER_TEMPLATE_KEYWORD)
  108. #     define __STL_MEMBER_TEMPLATE_KEYWORD
  109. #   endif
  110. #   if !defined(_EXPLICIT_IS_KEYWORD)
  111. #     define __STL_NEED_EXPLICIT
  112. #   endif
  113. #   ifdef __EXCEPTIONS
  114. #     define __STL_USE_EXCEPTIONS
  115. #   endif
  116. #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
  117. #     define __STL_HAS_NAMESPACES
  118. #   endif 
  119. #   if !defined(_NOTHREADS) && !defined(_PTHREADS)
  120. #     define __STL_SGI_THREADS
  121. #   endif
  122. #   if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
  123. #     define __STL_LONG_LONG
  124. #   endif
  125. # endif
  126. # ifdef __GNUC__
  127. #   if __GNUC__ == 2 && __GNUC_MINOR__ <= 7
  128. #     define __STL_STATIC_TEMPLATE_MEMBER_BUG
  129. #   endif
  130. #   if __GNUC__ < 2 
  131. #     define __STL_NEED_TYPENAME
  132. #     define __STL_NEED_EXPLICIT
  133. #   endif
  134. #   if __GNUC__ == 2 && __GNUC_MINOR__ >= 8
  135. #     define __STL_CLASS_PARTIAL_SPECIALIZATION
  136. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER
  137. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  138. #     define __STL_MEMBER_TEMPLATES
  139.       //    g++ 2.8.1 supports member template functions, but not member
  140.       //    template nested classes.
  141. #   endif
  142. #   ifdef __EXCEPTIONS
  143. #     define __STL_USE_EXCEPTIONS
  144. #   endif
  145. # endif
  146. # if defined(__SUNPRO_CC) 
  147. #   define __STL_NO_BOOL
  148. #   define __STL_NEED_TYPENAME
  149. #   define __STL_NEED_EXPLICIT
  150. #   define __STL_USE_EXCEPTIONS
  151. # endif
  152. # if defined(__COMO__)
  153. #   define __STL_MEMBER_TEMPLATES
  154. #   define __STL_MEMBER_TEMPLATE_CLASSES
  155. #   define __STL_CLASS_PARTIAL_SPECIALIZATION
  156. #   define __STL_USE_EXCEPTIONS
  157. #   define __STL_HAS_NAMESPACES
  158. # endif
  159. # if defined(_MSC_VER)
  160. #   define __STL_NO_DRAND48
  161. #   define __STL_NEED_TYPENAME
  162. #   if _MSC_VER < 1100  /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
  163. #     define __STL_NEED_EXPLICIT
  164. #     define __STL_NO_BOOL
  165. #     if  _MSC_VER > 1000
  166. #       include <yvals.h>
  167. #       define __STL_DONT_USE_BOOL_TYPEDEF
  168. #     endif
  169. #   endif
  170. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  171. #   define __SGI_STL_NO_ARROW_OPERATOR
  172. #   ifdef _CPPUNWIND
  173. #     define __STL_USE_EXCEPTIONS
  174. #   endif
  175. #   ifdef _MT
  176. #     define __STL_WIN32THREADS
  177. #   endif
  178. #   if _MSC_VER >= 1200
  179. #     define __STL_PARTIAL_SPECIALIZATION_SYNTAX
  180. #     define __STL_HAS_NAMESPACES
  181. #     define __STL_NO_NAMESPACES
  182. #   endif
  183. # endif
  184. # if defined(__BORLANDC__)
  185. #   define __STL_NO_DRAND48
  186. #   define __STL_NEED_TYPENAME
  187. #   define __STL_LIMITED_DEFAULT_TEMPLATES
  188. #   define __SGI_STL_NO_ARROW_OPERATOR
  189. #   define __STL_NON_TYPE_TMPL_PARAM_BUG
  190. #   ifdef _CPPUNWIND
  191. #     define __STL_USE_EXCEPTIONS
  192. #   endif
  193. #   ifdef __MT__
  194. #     define __STL_WIN32THREADS
  195. #   endif
  196. # endif
  197. # if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
  198.     typedef int bool;
  199. #   define true 1
  200. #   define false 0
  201. # endif
  202. # ifdef __STL_NEED_TYPENAME
  203. #   define typename
  204. # endif
  205. # ifdef __STL_MEMBER_TEMPLATE_KEYWORD
  206. #   define __STL_TEMPLATE template
  207. # else
  208. #   define __STL_TEMPLATE
  209. # endif
  210. # ifdef __STL_NEED_EXPLICIT
  211. #   define explicit
  212. # endif
  213. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
  214. #   define __STL_NULL_TMPL_ARGS <>
  215. # else
  216. #   define __STL_NULL_TMPL_ARGS
  217. # endif
  218. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) 
  219.      || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
  220. #   define __STL_TEMPLATE_NULL template<>
  221. # else
  222. #   define __STL_TEMPLATE_NULL
  223. # endif
  224. // Use standard-conforming allocators if we have the necessary language
  225. // features.  __STL_USE_SGI_ALLOCATORS is a hook so that users can 
  226. // disable new-style allocators, and continue to use the same kind of
  227. // allocators as before, without having to edit library headers.
  228. # if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && 
  229.      defined(__STL_MEMBER_TEMPLATES) && 
  230.      defined(__STL_MEMBER_TEMPLATE_CLASSES) && 
  231.     !defined(__STL_NO_BOOL) && 
  232.     !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && 
  233.     !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && 
  234.     !defined(__STL_USE_SGI_ALLOCATORS) 
  235. #   define __STL_USE_STD_ALLOCATORS
  236. # endif
  237. # ifndef __STL_DEFAULT_ALLOCATOR
  238. #   ifdef __STL_USE_STD_ALLOCATORS
  239. #     define __STL_DEFAULT_ALLOCATOR(T) allocator<T>
  240. #   else
  241. #     define __STL_DEFAULT_ALLOCATOR(T) alloc
  242. #   endif
  243. # endif
  244. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
  245. // without having to edit library headers.
  246. # if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
  247. #   define __STD std
  248. #   define __STL_BEGIN_NAMESPACE namespace std {
  249. #   define __STL_END_NAMESPACE }
  250. #   define __STL_USE_NAMESPACE_FOR_RELOPS
  251. #   define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
  252. #   define __STL_END_RELOPS_NAMESPACE }
  253. #   define __STD_RELOPS std
  254. #   define __STL_USE_NAMESPACES
  255. # else
  256. #   define __STD 
  257. #   define __STL_BEGIN_NAMESPACE 
  258. #   define __STL_END_NAMESPACE 
  259. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS
  260. #   define __STL_BEGIN_RELOPS_NAMESPACE 
  261. #   define __STL_END_RELOPS_NAMESPACE 
  262. #   define __STD_RELOPS 
  263. #   undef  __STL_USE_NAMESPACES
  264. # endif
  265. # ifdef __STL_USE_EXCEPTIONS
  266. #   define __STL_TRY try
  267. #   define __STL_CATCH_ALL catch(...)
  268. #   define __STL_THROW(x) throw x
  269. #   define __STL_RETHROW throw
  270. #   define __STL_NOTHROW throw()
  271. #   define __STL_UNWIND(action) catch(...) { action; throw; }
  272. # else
  273. #   define __STL_TRY 
  274. #   define __STL_CATCH_ALL if (false)
  275. #   define __STL_THROW(x) 
  276. #   define __STL_RETHROW 
  277. #   define __STL_NOTHROW 
  278. #   define __STL_UNWIND(action) 
  279. # endif
  280. #ifdef __STL_ASSERTIONS
  281. # include <stdio.h>
  282. # define __stl_assert(expr) 
  283.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %sn", 
  284.   __FILE__, __LINE__, # expr); abort(); }
  285. #else
  286. # define __stl_assert(expr)
  287. #endif
  288. #endif /* __STL_CONFIG_H */
  289. // Local Variables:
  290. // mode:C++
  291. // End: