zoukankan      html  css  js  c++  java
  • STL stl_config.h

    stl_config.h
       1. // Filename:    stl_config.h  
       2.   
       3. // Comment By:  凝霜  
       4. // E-mail:      mdl2009@vip.qq.com  
       5. // Blog:        http://blog.csdn.net/mdl13412  
       6.   
       7. /* 
       8.  * Copyright (c) 1996-1997 
       9.  * Silicon Graphics Computer Systems, Inc. 
      10.  * 
      11.  * Permission to use, copy, modify, distribute and sell this software 
      12.  * and its documentation for any purpose is hereby granted without fee, 
      13.  * provided that the above copyright notice appear in all copies and 
      14.  * that both that copyright notice and this permission notice appear 
      15.  * in supporting documentation.  Silicon Graphics makes no 
      16.  * representations about the suitability of this software for any 
      17.  * purpose.  It is provided "as is" without express or implied warranty. 
      18.  */  
      19.   
      20. /* NOTE: This is an internal header file, included by other STL headers. 
      21.  *   You should not attempt to use it directly. 
      22.  */  
      23.   
      24. #ifndef __STL_CONFIG_H  
      25. #define __STL_CONFIG_H  
      26.   
      27. //  本配置文件功能表:  
      28. //  (1)  如果不编译器没有定义bool, true, false则定义  
      29. //  (2)  如果编译器不支持drand48()函数则定义__STL_NO_DRAND48  
      30. //       注: drand48产生双精度的伪随机数, 因为采用了48bit计算, 故名drand48  
      31. //  (3)  如果编译器不支持static members of template classes(模板类静态成员),  
      32. //       则定义__STL_STATIC_TEMPLATE_MEMBER_BUG  
      33. //  (4)  如果编译器不支持'typename'关键字, 则将'typename'定义为空(null macro)  
      34. //  (5)  如果编译器支持partial specialization of class templates(模板类偏特化),  
      35. //       则定义__STL_CLASS_PARTIAL_SPECIALIZATION  
      36. //       参考文献: http://msdn.microsoft.com/en-us/library/9w7t3kf1(v=VS.71).aspx  
      37. //  (6)  如果编译器支持partial ordering of function templates(模板函数特化优先级),  
      38. //       则定义__STL_FUNCTION_TMPL_PARTIAL_ORDER  
      39. //       参考资料: http://msdn.microsoft.com/zh-cn/library/zaycz069.aspx  
      40. //  (7)  如果编译器支持calling a function template by providing its template  
      41. //       arguments explicitly(显式指定调用模板函数的模板参数)  
      42. //       则定义__STL_EXPLICIT_FUNCTION_TMPL_ARGS  
      43. //  (8)  如果编译器支持template members of classes(类模板成员),  
      44. //       则定义__STL_MEMBER_TEMPLATES  
      45. //  (9)  如果编译器不支持'explicit'关键字, 则将'explicit'定义为空(null macro)  
      46. //  (10) 如果编译器不能根据前一个模板参数设定后面的默认模板参数,  
      47. //       则定义__STL_LIMITED_DEFAULT_TEMPLATES  
      48. //  (11) 如果编译器处理模板函数的non-type模板参数类型推断有困难,  
      49. //       则定义__STL_NON_TYPE_TMPL_PARAM_BUG  
      50. //  (12) 如果编译器不支持迭代器使用'->'操作符,  
      51. //       则定义__SGI_STL_NO_ARROW_OPERATOR  
      52. //  (13) 如果编译器(在当前编译模式下)支持异常,  
      53. //       则定义__STL_USE_EXCEPTIONS  
      54. //  (14) 如果我们将STL放进命名空间中,  
      55. //       则定义__STL_USE_NAMESPACES  
      56. //  (15) 如果本STL在SGI的编译器上编译, 并且用户没有选择pthreads或者no threads,  
      57. //       则默认使用__STL_SGI_THREADS  
      58. //       注: POSIX thread 简称为pthread, Posix线程是一个POSIX标准线程.  
      59. //  (16) 如果本STL在Win32平台的编译器上使用多线程模式编译,  
      60. //       则定义__STL_WIN32THREADS  
      61. //  (17) 适当的定义命名空间相关的宏(__STD, __STL_BEGIN_NAMESPACE, 等)  
      62. //  (18) 适当的定义异常相关的宏(__STL_TRY, __STL_UNWIND, 等)  
      63. //  (19) 根据是否定义__STL_ASSERTIONS, 将__stl_assert定义为断言或者空(null macro)  
      64.   
      65. #ifdef _PTHREADS  
      66. #   define __STL_PTHREADS  
      67. #endif  
      68.   
      69. // 如果编译器不提供本STL需要的一些功能,则定义__STL_NEED_XXX  
      70. # if defined(__sgi) && !defined(__GNUC__)  
      71. #   if !defined(_BOOL)  
      72. #     define __STL_NEED_BOOL  
      73. #   endif  
      74. #   if !defined(_TYPENAME_IS_KEYWORD)  
      75. #     define __STL_NEED_TYPENAME  
      76. #   endif  
      77. #   ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES  
      78. #     define __STL_CLASS_PARTIAL_SPECIALIZATION  
      79. #   endif  
      80. #   ifdef _MEMBER_TEMPLATES  
      81. #     define __STL_MEMBER_TEMPLATES  
      82. #   endif  
      83. #   if !defined(_EXPLICIT_IS_KEYWORD)  
      84. #     define __STL_NEED_EXPLICIT  
      85. #   endif  
      86. #   ifdef __EXCEPTIONS  
      87. #     define __STL_USE_EXCEPTIONS  
      88. #   endif  
      89. #   if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)  
      90. #     define __STL_USE_NAMESPACES  
      91. #   endif  
      92. #   if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)  
      93. #     define __STL_SGI_THREADS  
      94. #   endif  
      95. # endif  
      96.   
      97. # ifdef __GNUC__  
      98. #   include <_G_config.h>  
      99. #   if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)  
     100. #     define __STL_STATIC_TEMPLATE_MEMBER_BUG  
     101. #     define __STL_NEED_TYPENAME  
     102. #     define __STL_NEED_EXPLICIT  
     103. #   else  
     104. #     define __STL_CLASS_PARTIAL_SPECIALIZATION  
     105. #     define __STL_FUNCTION_TMPL_PARTIAL_ORDER  
     106. #     define __STL_EXPLICIT_FUNCTION_TMPL_ARGS  
     107. #     define __STL_MEMBER_TEMPLATES  
     108. #   endif  
     109.     /* glibc pre 2.0 is very buggy. We have to disable thread for it. 
     110.        It should be upgraded to glibc 2.0 or later. */  
     111. #   if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)  
     112. #     define __STL_PTHREADS  
     113. #   endif  
     114. #   ifdef __EXCEPTIONS  
     115. #     define __STL_USE_EXCEPTIONS  
     116. #   endif  
     117. # endif  
     118.   
     119. // Sun C++ compiler  
     120. # if defined(__SUNPRO_CC)  
     121. #   define __STL_NEED_BOOL  
     122. #   define __STL_NEED_TYPENAME  
     123. #   define __STL_NEED_EXPLICIT  
     124. #   define __STL_USE_EXCEPTIONS  
     125. # endif  
     126.   
     127. // TODO: 这个我没找到资料, 如果你知道或者有相关资料请联系我, Thank U  
     128. # if defined(__COMO__)  
     129. #   define __STL_MEMBER_TEMPLATES  
     130. #   define __STL_CLASS_PARTIAL_SPECIALIZATION  
     131. #   define __STL_USE_EXCEPTIONS  
     132. #   define __STL_USE_NAMESPACES  
     133. # endif  
     134.   
     135. // _MSC_VER 定义微软编译器的版本  
     136. // MS VC++ 10.0 _MSC_VER = 1600  
     137. // MS VC++ 9.0 _MSC_VER = 1500  
     138. // MS VC++ 8.0 _MSC_VER = 1400  
     139. // MS VC++ 7.1 _MSC_VER = 1310  
     140. // MS VC++ 7.0 _MSC_VER = 1300  
     141. // MS VC++ 6.0 _MSC_VER = 1200  
     142. // MS VC++ 5.0 _MSC_VER = 1100  
     143. # if defined(_MSC_VER)  
     144. #   if _MSC_VER > 1000  
     145. #     include <yvals.h>  
     146. #   else  
     147. #     define __STL_NEED_BOOL  
     148. #   endif  
     149. #   define __STL_NO_DRAND48  
     150. #   define __STL_NEED_TYPENAME  
     151. #   if _MSC_VER < 1100  
     152. #     define __STL_NEED_EXPLICIT  
     153. #   endif  
     154. #   define __STL_NON_TYPE_TMPL_PARAM_BUG  
     155. #   define __SGI_STL_NO_ARROW_OPERATOR  
     156. #   ifdef _CPPUNWIND  
     157. #     define __STL_USE_EXCEPTIONS  
     158. #   endif  
     159. #   ifdef _MT  
     160. #     define __STL_WIN32THREADS  
     161. #   endif  
     162. # endif  
     163.   
     164. # if defined(__BORLANDC__)  
     165. #   define __STL_NO_DRAND48  
     166. #   define __STL_NEED_TYPENAME  
     167. #   define __STL_LIMITED_DEFAULT_TEMPLATES  
     168. #   define __SGI_STL_NO_ARROW_OPERATOR  
     169. #   define __STL_NON_TYPE_TMPL_PARAM_BUG  
     170. #   ifdef _CPPUNWIND  
     171. #     define __STL_USE_EXCEPTIONS  
     172. #   endif  
     173. #   ifdef __MT__  
     174. #     define __STL_WIN32THREADS  
     175. #   endif  
     176. # endif  
     177.   
     178.   
     179. # if defined(__STL_NEED_BOOL)  
     180.     typedef int bool;  
     181. #   define true 1  
     182. #   define false 0  
     183. # endif  
     184.   
     185. # ifdef __STL_NEED_TYPENAME  
     186. #   define typename  
     187. # endif  
     188.   
     189. # ifdef __STL_NEED_EXPLICIT  
     190. #   define explicit  
     191. # endif  
     192.   
     193. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS  
     194. #   define __STL_NULL_TMPL_ARGS <>  
     195. # else  
     196. #   define __STL_NULL_TMPL_ARGS  
     197. # endif  
     198.   
     199. # ifdef __STL_CLASS_PARTIAL_SPECIALIZATION  
     200. #   define __STL_TEMPLATE_NULL template<>  
     201. # else  
     202. #   define __STL_TEMPLATE_NULL  
     203. # endif  
     204.   
     205. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces  
     206. // without having to edit library headers.  
     207. # if defined(__STL_USE_NAMESPACES) && !defined(__STL_NO_NAMESPACES)  
     208. #   define __STD std  
     209. #   define __STL_BEGIN_NAMESPACE namespace std {  
     210. #   define __STL_END_NAMESPACE }  
     211. #   define __STL_USE_NAMESPACE_FOR_RELOPS  
     212. #   define __STL_BEGIN_RELOPS_NAMESPACE namespace std {  
     213. #   define __STL_END_RELOPS_NAMESPACE }  
     214. #   define __STD_RELOPS std  
     215. # else  
     216. #   define __STD  
     217. #   define __STL_BEGIN_NAMESPACE  
     218. #   define __STL_END_NAMESPACE  
     219. #   undef  __STL_USE_NAMESPACE_FOR_RELOPS  
     220. #   define __STL_BEGIN_RELOPS_NAMESPACE  
     221. #   define __STL_END_RELOPS_NAMESPACE  
     222. #   define __STD_RELOPS  
     223. # endif  
     224.   
     225. # ifdef __STL_USE_EXCEPTIONS  
     226. #   define __STL_TRY try  
     227. #   define __STL_CATCH_ALL catch(...)  
     228. #   define __STL_RETHROW throw  
     229. #   define __STL_NOTHROW throw()  
     230. #   define __STL_UNWIND(action) catch(...) { action; throw; }  
     231. # else  
     232. #   define __STL_TRY  
     233. #   define __STL_CATCH_ALL if (false)  
     234. #   define __STL_RETHROW  
     235. #   define __STL_NOTHROW  
     236. #   define __STL_UNWIND(action)  
     237. # endif  
     238.   
     239. #ifdef __STL_ASSERTIONS  
     240. # include <stdio.h>  
     241. # define __stl_assert(expr)   
     242.     if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s
    ",   
     243.               __FILE__, __LINE__, # expr); abort(); }  
     244. #else  
     245. # define __stl_assert(expr)  
     246. #endif  
     247.   
     248. #endif /* __STL_CONFIG_H */  
     249.   
     250. // Local Variables:  
     251. // mode:C++  
     252. // End:
  • 相关阅读:
    pandas Dataframe filter
    process xlsx with pandas
    data manipulate in excel with easyExcel class
    modify registry in user environment
    add number line in vim
    java import webservice
    ctypes MessageBoxA
    music 163 lyrics
    【python实例】自动贩卖机
    【python基础】sys模块(库)方法汇总
  • 原文地址:https://www.cnblogs.com/zendu/p/4987857.html
Copyright © 2011-2022 走看看