STL stl_config.h
stl_config.h
. // Filename: stl_config.h
.
. // Comment By: 凝霜
. // E-mail: mdl2009@vip.qq.com
. // Blog: http://blog.csdn.net/mdl13412
.
. /*
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. */
.
. /* NOTE: This is an internal header file, included by other STL headers.
21. * You should not attempt to use it directly.
22. */
.
. #ifndef __STL_CONFIG_H
. #define __STL_CONFIG_H
.
. // 本配置文件功能表:
. // (1) 如果不编译器没有定义bool, true, false则定义
. // (2) 如果编译器不支持drand48()函数则定义__STL_NO_DRAND48
. // 注: drand48产生双精度的伪随机数, 因为采用了48bit计算, 故名drand48
. // (3) 如果编译器不支持static members of template classes(模板类静态成员),
. // 则定义__STL_STATIC_TEMPLATE_MEMBER_BUG
. // (4) 如果编译器不支持'typename'关键字, 则将'typename'定义为空(null macro)
. // (5) 如果编译器支持partial specialization of class templates(模板类偏特化),
. // 则定义__STL_CLASS_PARTIAL_SPECIALIZATION
. // 参考文献: http://msdn.microsoft.com/en-us/library/9w7t3kf1(v=VS.71).aspx
. // (6) 如果编译器支持partial ordering of function templates(模板函数特化优先级),
. // 则定义__STL_FUNCTION_TMPL_PARTIAL_ORDER
. // 参考资料: http://msdn.microsoft.com/zh-cn/library/zaycz069.aspx
. // (7) 如果编译器支持calling a function template by providing its template
. // arguments explicitly(显式指定调用模板函数的模板参数)
. // 则定义__STL_EXPLICIT_FUNCTION_TMPL_ARGS
. // (8) 如果编译器支持template members of classes(类模板成员),
. // 则定义__STL_MEMBER_TEMPLATES
. // (9) 如果编译器不支持'explicit'关键字, 则将'explicit'定义为空(null macro)
. // (10) 如果编译器不能根据前一个模板参数设定后面的默认模板参数,
. // 则定义__STL_LIMITED_DEFAULT_TEMPLATES
. // (11) 如果编译器处理模板函数的non-type模板参数类型推断有困难,
. // 则定义__STL_NON_TYPE_TMPL_PARAM_BUG
. // (12) 如果编译器不支持迭代器使用'->'操作符,
. // 则定义__SGI_STL_NO_ARROW_OPERATOR
. // (13) 如果编译器(在当前编译模式下)支持异常,
. // 则定义__STL_USE_EXCEPTIONS
. // (14) 如果我们将STL放进命名空间中,
. // 则定义__STL_USE_NAMESPACES
. // (15) 如果本STL在SGI的编译器上编译, 并且用户没有选择pthreads或者no threads,
. // 则默认使用__STL_SGI_THREADS
. // 注: POSIX thread 简称为pthread, Posix线程是一个POSIX标准线程.
. // (16) 如果本STL在Win32平台的编译器上使用多线程模式编译,
. // 则定义__STL_WIN32THREADS
. // (17) 适当的定义命名空间相关的宏(__STD, __STL_BEGIN_NAMESPACE, 等)
. // (18) 适当的定义异常相关的宏(__STL_TRY, __STL_UNWIND, 等)
. // (19) 根据是否定义__STL_ASSERTIONS, 将__stl_assert定义为断言或者空(null macro)
.
. #ifdef _PTHREADS
. # define __STL_PTHREADS
. #endif
.
. // 如果编译器不提供本STL需要的一些功能,则定义__STL_NEED_XXX
. # if defined(__sgi) && !defined(__GNUC__)
. # if !defined(_BOOL)
. # define __STL_NEED_BOOL
. # endif
. # if !defined(_TYPENAME_IS_KEYWORD)
. # define __STL_NEED_TYPENAME
. # endif
. # ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
. # define __STL_CLASS_PARTIAL_SPECIALIZATION
. # endif
. # ifdef _MEMBER_TEMPLATES
. # define __STL_MEMBER_TEMPLATES
. # endif
. # if !defined(_EXPLICIT_IS_KEYWORD)
. # define __STL_NEED_EXPLICIT
. # endif
. # ifdef __EXCEPTIONS
. # define __STL_USE_EXCEPTIONS
. # endif
. # if (_COMPILER_VERSION >= ) && defined(_NAMESPACES)
. # define __STL_USE_NAMESPACES
. # endif
. # if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
. # define __STL_SGI_THREADS
. # endif
. # endif
.
. # ifdef __GNUC__
. # include <_G_config.h>
. # if __GNUC__ < || (__GNUC__ == && __GNUC_MINOR__ < )
. # define __STL_STATIC_TEMPLATE_MEMBER_BUG
. # define __STL_NEED_TYPENAME
. # define __STL_NEED_EXPLICIT
. # else
. # define __STL_CLASS_PARTIAL_SPECIALIZATION
. # define __STL_FUNCTION_TMPL_PARTIAL_ORDER
. # define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
. # define __STL_MEMBER_TEMPLATES
. # endif
. /* 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. */
. # if !defined(_NOTHREADS) && __GLIBC__ >= && defined(_G_USING_THUNKS)
. # define __STL_PTHREADS
. # endif
. # ifdef __EXCEPTIONS
. # define __STL_USE_EXCEPTIONS
. # endif
. # endif
.
. // Sun C++ compiler
. # if defined(__SUNPRO_CC)
. # define __STL_NEED_BOOL
. # define __STL_NEED_TYPENAME
. # define __STL_NEED_EXPLICIT
. # define __STL_USE_EXCEPTIONS
. # endif
.
. // TODO: 这个我没找到资料, 如果你知道或者有相关资料请联系我, Thank U
. # if defined(__COMO__)
. # define __STL_MEMBER_TEMPLATES
. # define __STL_CLASS_PARTIAL_SPECIALIZATION
. # define __STL_USE_EXCEPTIONS
. # define __STL_USE_NAMESPACES
. # endif
.
. // _MSC_VER 定义微软编译器的版本
. // MS VC++ 10.0 _MSC_VER = 1600
. // MS VC++ 9.0 _MSC_VER = 1500
. // MS VC++ 8.0 _MSC_VER = 1400
. // MS VC++ 7.1 _MSC_VER = 1310
. // MS VC++ 7.0 _MSC_VER = 1300
. // MS VC++ 6.0 _MSC_VER = 1200
. // MS VC++ 5.0 _MSC_VER = 1100
. # if defined(_MSC_VER)
. # if _MSC_VER >
. # include <yvals.h>
. # else
. # define __STL_NEED_BOOL
. # endif
. # define __STL_NO_DRAND48
. # define __STL_NEED_TYPENAME
. # if _MSC_VER <
. # define __STL_NEED_EXPLICIT
. # endif
. # define __STL_NON_TYPE_TMPL_PARAM_BUG
. # define __SGI_STL_NO_ARROW_OPERATOR
. # ifdef _CPPUNWIND
. # define __STL_USE_EXCEPTIONS
. # endif
. # ifdef _MT
. # define __STL_WIN32THREADS
. # endif
. # endif
.
. # if defined(__BORLANDC__)
. # define __STL_NO_DRAND48
. # define __STL_NEED_TYPENAME
. # define __STL_LIMITED_DEFAULT_TEMPLATES
. # define __SGI_STL_NO_ARROW_OPERATOR
. # define __STL_NON_TYPE_TMPL_PARAM_BUG
. # ifdef _CPPUNWIND
. # define __STL_USE_EXCEPTIONS
. # endif
. # ifdef __MT__
. # define __STL_WIN32THREADS
. # endif
. # endif
.
.
. # if defined(__STL_NEED_BOOL)
. typedef int bool;
. # define true
. # define false
. # endif
.
. # ifdef __STL_NEED_TYPENAME
. # define typename
. # endif
.
. # ifdef __STL_NEED_EXPLICIT
. # define explicit
. # endif
.
. # ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
. # define __STL_NULL_TMPL_ARGS <>
. # else
. # define __STL_NULL_TMPL_ARGS
. # endif
.
. # ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
. # define __STL_TEMPLATE_NULL template<>
. # else
. # define __STL_TEMPLATE_NULL
. # endif
.
. // __STL_NO_NAMESPACES is a hook so that users can disable namespaces
. // without having to edit library headers.
. # if defined(__STL_USE_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
. # define __STD std
. # define __STL_BEGIN_NAMESPACE namespace std {
. # define __STL_END_NAMESPACE }
. # define __STL_USE_NAMESPACE_FOR_RELOPS
. # define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
. # define __STL_END_RELOPS_NAMESPACE }
. # define __STD_RELOPS std
. # else
. # define __STD
. # define __STL_BEGIN_NAMESPACE
. # define __STL_END_NAMESPACE
. # undef __STL_USE_NAMESPACE_FOR_RELOPS
. # define __STL_BEGIN_RELOPS_NAMESPACE
. # define __STL_END_RELOPS_NAMESPACE
. # define __STD_RELOPS
. # endif
.
. # ifdef __STL_USE_EXCEPTIONS
. # define __STL_TRY try
. # define __STL_CATCH_ALL catch(...)
. # define __STL_RETHROW throw
. # define __STL_NOTHROW throw()
. # define __STL_UNWIND(action) catch(...) { action; throw; }
. # else
. # define __STL_TRY
. # define __STL_CATCH_ALL if (false)
. # define __STL_RETHROW
. # define __STL_NOTHROW
. # define __STL_UNWIND(action)
. # endif
.
. #ifdef __STL_ASSERTIONS
. # include <stdio.h>
. # define __stl_assert(expr) \
. if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
. __FILE__, __LINE__, # expr); abort(); }
. #else
. # define __stl_assert(expr)
. #endif
.
. #endif /* __STL_CONFIG_H */
.
. // Local Variables:
. // mode:C++
. // End:
STL stl_config.h的更多相关文章
- stl_config.h基本宏
四.宏: (其实呢, 我们所有的宏都包含在了 "stl_config.h"头文件中.) //这些宏是怎么判断是否需要定义:是否有指定的宏,还有一些特定的编译器也可能支持. 4.1. ...
- STL defalloc.h
defalloc.h . // Filename: defalloc.h . . // Comment By: 凝霜 . // E-mail: mdl2009@vip.qq.com . // Blog ...
- STL stl_alloc.h
# // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...
- STL stl_uninitialized.h
stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...
- STL stl_construct.h
stl_construct.h // Filename: stl_construct.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog ...
- STL源码剖析——Iterators与Traits编程#5 __type_traits
上节给出了iterator_traits以及用到traits机制的部分函数的完整代码,可以看到traits机制能够提取迭代器的特性从而调用不同的函数,实现效率的最大化.显然这么好的机制不应该仅局限于在 ...
- STL源码剖析—stl_config
操作系统:centos 6.4STL源码版本:3.3 前言: 要看一个项目的源码,首先要选中切入点. 那么在sgi stl 标准库中,其切入点是什么呢? 答案是:stl_config ...
- STL源代码剖析——基本算法stl_algobase.h
前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...
- STL源码标注_空间适配器
/* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...
随机推荐
- EasyUI入门视频教程
EasyUI入门视频教程02 http://www.tudou.com/programs/view/TBlaIcNU5ck/
- 苹果input点击页面稍微变大的问题
今天在群里看到有人问input标签点击以后在ios下页面会变大一点的问题 说实话我是没有遇到过后来解决了我看了一下代码 我明白了 不是我没有遇到过是因为我写的比较规范 所以没出现那样的问题 嘿嘿. ...
- CentOS Linux解决网卡报错Bringing up interface eth0.....
问题描述:在VMware里克隆出来的CentOS Linux,开机执行命令:ifconfig...没有看到eth0网卡.然后重启网卡又报以下错误:Bringing up interface eth0: ...
- Win7程序运行出现Windows Based Scrip Host 已停止工作问题的解决方法
最近在使用类似于Teamviewer这样的程序时,突然运行不了,报错:Microsoft Windows Based Scrip Host 已停止工作的问题,从系统日志来看,好像是空指针问题,但是又无 ...
- Nginx教程
Nginx教程 1.背景 介绍 Nginx是一个高性能的HTTP服务器,以及反向代理服务器 组成 Ngnix有内核和模块组成.微结构的内核根据配置文件将一个请求映射到一个location块中,该loc ...
- 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam
由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...
- 使用apt-get 安装后的mysql 登录问题
当使用apt-get安装mysql后,ubuntu会自动生成一个用户名和密码.所以在第一次登陆时会报如下错误 ERROR 1045 (28000): Access denied for user 'd ...
- C#使用SQL语句时候的万用密码问题
实际上万用密码就是因为SQL里面的语句--是注释,利用bug添加用户名和密码. 例如,用户名为 adada’ or 1=1-- 第一个种写法登录成功了 第二种写法登录失败(正确) 第三种写法登录失败( ...
- Chrome Extension 扩展程序 小白入门
Chrome Extension 扩展程序 前请说明:本文适用于之前从来没有接触过chrome extension扩展程序的同学~ 编写demo 创建项目文件夹chrome_ext_demo,在项目根 ...
- Yii2 提供可以用属性的方式去获取类的一个方法
刚开始用 Yii 的小朋友可能对下面的写法非常疑惑: public function actionIndex() { $user = User::find()->where(['name'=&g ...