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:
  • 相关阅读:
    小项目中建立列表页时间需要注意的
    【腾讯Bugly干货分享】总结一个技术总监的教训和经验
    【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理
    【腾讯Bugly干货分享】微信终端跨平台组件 Mars 系列
    【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二)
    【腾讯Bugly干货分享】程序员们也该知道的事——“期权和股票”
    【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制
    【腾讯优测干货分享】如何降低App的待机内存(三)——探索内存增长的原因
    【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题
    【腾讯Bugly干货分享】聊聊苹果的Bug
  • 原文地址:https://www.cnblogs.com/zendu/p/4987857.html
Copyright © 2011-2022 走看看