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的更多相关文章

  1. stl_config.h基本宏

    四.宏: (其实呢, 我们所有的宏都包含在了 "stl_config.h"头文件中.) //这些宏是怎么判断是否需要定义:是否有指定的宏,还有一些特定的编译器也可能支持. 4.1. ...

  2. STL defalloc.h

    defalloc.h . // Filename: defalloc.h . . // Comment By: 凝霜 . // E-mail: mdl2009@vip.qq.com . // Blog ...

  3. STL stl_alloc.h

    # // Comment By: 凝霜 # // E-mail: mdl2009@vip.qq.com # // Blog: http://blog.csdn.net/mdl13412 # # // ...

  4. STL stl_uninitialized.h

    stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...

  5. STL stl_construct.h

    stl_construct.h // Filename: stl_construct.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog ...

  6. STL源码剖析——Iterators与Traits编程#5 __type_traits

    上节给出了iterator_traits以及用到traits机制的部分函数的完整代码,可以看到traits机制能够提取迭代器的特性从而调用不同的函数,实现效率的最大化.显然这么好的机制不应该仅局限于在 ...

  7. STL源码剖析—stl_config

    操作系统:centos 6.4STL源码版本:3.3 前言:    要看一个项目的源码,首先要选中切入点.    那么在sgi stl 标准库中,其切入点是什么呢?    答案是:stl_config ...

  8. STL源代码剖析——基本算法stl_algobase.h

    前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...

  9. STL源码标注_空间适配器

    /* stl_alloc.h */ SGI STL空间适配器的主要由alloc.h和stl_alloc.h实现 SGI STL空间适配器的核心: 第一级适配器__malloc_alloc_templa ...

随机推荐

  1. keil中使用Astyle格式化你的代码的方法2篇合

    关于Astyle Astyle 的全称是Artistic Style的简称,是一个开源的源代码格式化工具,可以对C,C++,C#以及Java等编程语言的源代码进行缩进.格式化.美化.Home Page ...

  2. 在express项目中使用redis

    在express项目中使用redis 准备工作 安装redis 安装redis桌面管理工具:Redis Desktop Manager 项目中安装redis:npm install redis 开始使 ...

  3. 四边形不等式优化DP——石子合并问题 学习笔记

    好方啊马上就要区域赛了连DP都不会QAQ 毛子青<动态规划算法的优化技巧>论文里面提到了一类问题:石子合并. n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆石子合并成新的 ...

  4. centos set up samba

    原文中文链接:https://wiki.centos.org/zh/HowTos/SetUpSamba 原文英文链接:https://wiki.centos.org/HowTos/SetUpSamba ...

  5. memcache 的使用

    基础知识 memcached 是一个开源项目,旨在利用多个服务器内的多余 RAM 来充当一个可存放经常被访问信息的内存缓存.这里的关键是使用了术语缓存:memcached 为加载自他处的信息提供的是内 ...

  6. ElasticSearch(二十一)正排和倒排索引

    1.区别 搜索的时候,要依靠倒排索引:排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values 在建立索引的时候,一方面会建立 ...

  7. java 从零开始 第二天

    2015年4月28号晚,珠海.晴. Java 的基本数据类型 有整型(integer),浮点型(float),布尔型(boolean),字符型(char) 1.整型(integer) java最基本的 ...

  8. webdriver与JS操作浏览器元素

    1.JQuery的选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 c ...

  9. jquery链式语法

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  10. 牛客小白月赛1 F 三视图 【循环】

    题目链接 https://www.nowcoder.com/acm/contest/85/F 思路 记录每一个面 上的点 是否有方块 然后 根据它的输出顺序 遍历访问 如果有 输出 'X' 否则 输出 ...