⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suffix.h

📁 彩信浏览器
💻 H
字号:
//  (C) Copyright Boost.org 2001. Permission to copy, use, modify, sell and//  distribute this software is granted provided this copyright notice appears//  in all copies. This software is provided "as is" without express or implied//  warranty, and with no claim as to its suitability for any purpose.//  See http://www.boost.org for most recent version.//  Boost config.hpp policy and rationale documentation has been moved to//  http://www.boost.org/libs/config////  This file is intended to be stable, and relatively unchanging.//  It should contain boilerplate code only - no compiler specific//  code unless it is unavoidable - no changes unless unavoidable./*  * @$Id: suffix.h,v 1.1 2003/11/24 12:14:48 kleanthis Exp $  */#ifndef AMBULANT_CONFIG_SUFFIX_H#define AMBULANT_CONFIG_SUFFIX_H//// look for long long by looking for the appropriate macros in <limits.h>.// Note that we use limits.h rather than climits for maximal portability,// remember that since these just declare a bunch of macros, there should be// no namespace issues from this.//#include <limits.h># if !defined(AMBULANT_HAS_LONG_LONG)                                              \   && !(defined(AMBULANT_MSVC) && AMBULANT_MSVC <=1300) && !defined(__BORLANDC__)     \   && (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))#  define AMBULANT_HAS_LONG_LONG#endif#if !defined(AMBULANT_HAS_LONG_LONG) && !defined(AMBULANT_NO_INTEGRAL_INT64_T)#  define AMBULANT_NO_INTEGRAL_INT64_T#endif// GCC 3.x will clean up all of those nasty macro definitions that// AMBULANT_NO_CTYPE_FUNCTIONS is intended to help work around, so undefine// it under GCC 3.x.#if defined(__GNUC__) && (__GNUC__ >= 3) && defined(AMBULANT_NO_CTYPE_FUNCTIONS)#  undef AMBULANT_NO_CTYPE_FUNCTIONS#endif//// Assume any extensions are in namespace std:: unless stated otherwise://#  ifndef AMBULANT_STD_EXTENSION_NAMESPACE#    define AMBULANT_STD_EXTENSION_NAMESPACE std#  endif//// If cv-qualified specializations are not allowed, then neither are cv-void ones://#  if defined(AMBULANT_NO_CV_SPECIALIZATIONS) \      && !defined(AMBULANT_NO_CV_VOID_SPECIALIZATIONS)#     define AMBULANT_NO_CV_VOID_SPECIALIZATIONS#  endif//// If there is no numeric_limits template, then it can't have any compile time// constants either!//#  if defined(AMBULANT_NO_LIMITS) \      && !defined(AMBULANT_NO_LIMITS_COMPILE_TIME_CONSTANTS)#     define AMBULANT_NO_LIMITS_COMPILE_TIME_CONSTANTS#     define AMBULANT_NO_MS_INT64_NUMERIC_LIMITS#     define AMBULANT_NO_LONG_LONG_NUMERIC_LIMITS#  endif//// if there is no long long then there is no specialisation// for numeric_limits<long long> either://#if !defined(AMBULANT_HAS_LONG_LONG) && !defined(AMBULANT_NO_LONG_LONG_NUMERIC_LIMITS)#  define AMBULANT_NO_LONG_LONG_NUMERIC_LIMITS#endif//// if there is no __int64 then there is no specialisation// for numeric_limits<__int64> either://#if !defined(AMBULANT_HAS_MS_INT64) && !defined(AMBULANT_NO_MS_INT64_NUMERIC_LIMITS)#  define AMBULANT_NO_MS_INT64_NUMERIC_LIMITS#endif//// if member templates are supported then so is the// VC6 subset of member templates://#  if !defined(AMBULANT_NO_MEMBER_TEMPLATES) \       && !defined(AMBULANT_MSVC6_MEMBER_TEMPLATES)#     define AMBULANT_MSVC6_MEMBER_TEMPLATES#  endif//// Without partial specialization, can't test for partial specialisation bugs://#  if defined(AMBULANT_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \      && !defined(AMBULANT_BCB_PARTIAL_SPECIALIZATION_BUG)#     define AMBULANT_BCB_PARTIAL_SPECIALIZATION_BUG#  endif//// Without partial specialization, std::iterator_traits can't work://#  if defined(AMBULANT_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \      && !defined(AMBULANT_NO_STD_ITERATOR_TRAITS)#     define AMBULANT_NO_STD_ITERATOR_TRAITS#  endif//// Without member template support, we can't have template constructors// in the standard library either://#  if defined(AMBULANT_NO_MEMBER_TEMPLATES) \      && !defined(AMBULANT_MSVC6_MEMBER_TEMPLATES) \      && !defined(AMBULANT_NO_TEMPLATED_ITERATOR_CONSTRUCTORS)#     define AMBULANT_NO_TEMPLATED_ITERATOR_CONSTRUCTORS#  endif//// Without member template support, we can't have a conforming// std::allocator template either://#  if defined(AMBULANT_NO_MEMBER_TEMPLATES) \      && !defined(AMBULANT_MSVC6_MEMBER_TEMPLATES) \      && !defined(AMBULANT_NO_STD_ALLOCATOR)#     define AMBULANT_NO_STD_ALLOCATOR#  endif//// If we have a standard allocator, then we have a partial one as well://#if !defined(AMBULANT_NO_STD_ALLOCATOR)#  define AMBULANT_HAS_PARTIAL_STD_ALLOCATOR#endif//// We can't have a working std::use_facet if there is no std::locale://#  if defined(AMBULANT_NO_STD_LOCALE) && !defined(AMBULANT_NO_STD_USE_FACET)#     define AMBULANT_NO_STD_USE_FACET#  endif//// We can't have a std::messages facet if there is no std::locale://#  if defined(AMBULANT_NO_STD_LOCALE) && !defined(AMBULANT_NO_STD_MESSAGES)#     define AMBULANT_NO_STD_MESSAGES#  endif//// We can't have a working std::wstreambuf if there is no std::locale://#  if defined(AMBULANT_NO_STD_LOCALE) && !defined(AMBULANT_NO_STD_WSTREAMBUF)#     define AMBULANT_NO_STD_WSTREAMBUF#  endif//// We can't have a <cwctype> if there is no <cwchar>://#  if defined(AMBULANT_NO_CWCHAR) && !defined(AMBULANT_NO_CWCTYPE)#     define AMBULANT_NO_CWCTYPE#  endif//// We can't have a swprintf if there is no <cwchar>://#  if defined(AMBULANT_NO_CWCHAR) && !defined(AMBULANT_NO_SWPRINTF)#     define AMBULANT_NO_SWPRINTF#  endif//// If Win32 support is turned off, then we must turn off// threading support also, unless there is some other// thread API enabled://#if defined(AMBULANT_DISABLE_WIN32) && defined(_WIN32) \   && !defined(AMBULANT_DISABLE_THREADS) && !defined(AMBULANT_HAS_PTHREADS)#  define AMBULANT_DISABLE_THREADS#endif//// Turn on threading support if the compiler thinks that it's in// multithreaded mode.  We put this here because there are only a// limited number of macros that identify this (if there's any missing// from here then add to the appropriate compiler section)://#if (defined(__MT__) || defined(_MT) || defined(_REENTRANT) \    || defined(_PTHREADS)) && !defined(AMBULANT_HAS_THREADS)#  define AMBULANT_HAS_THREADS#endif//// Turn threading support off if AMBULANT_DISABLE_THREADS is defined://#if defined(AMBULANT_DISABLE_THREADS) && defined(AMBULANT_HAS_THREADS)#  undef AMBULANT_HAS_THREADS#endif//// Turn threading support off if we don't recognise the threading API://#if defined(AMBULANT_HAS_THREADS) && !defined(AMBULANT_HAS_PTHREADS)\      && !defined(AMBULANT_HAS_WINTHREADS) && !defined(AMBULANT_HAS_BETHREADS)\      && !defined(AMBULANT_HAS_MPTASKS)#  undef AMBULANT_HAS_THREADS#endif//// If the compiler claims to be C99 conformant, then it had better// have a <stdint.h>://#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901)#     define AMBULANT_HAS_STDINT_H#  endif//// Define AMBULANT_NO_SLIST and AMBULANT_NO_HASH if required.// Note that this is for backwards compatibility only.//#  ifndef AMBULANT_HAS_SLIST#     define AMBULANT_NO_SLIST#  endif#  ifndef AMBULANT_HAS_HASH#     define AMBULANT_NO_HASH#  endif//  AMBULANT_NO_STDC_NAMESPACE workaround  --------------------------------------////  Because std::size_t usage is so common, even in boost headers which do not//  otherwise use the C library, the <cstddef> workaround is included here so//  that ugly workaround code need not appear in many other boost headers.//  NOTE WELL: This is a workaround for non-conforming compilers; <cstddef> //  must still be #included in the usual places so that <cstddef> inclusion//  works as expected with standard conforming compilers.  The resulting//  double inclusion of <cstddef> is harmless.# ifdef AMBULANT_NO_STDC_NAMESPACE#   include <cstddef>    namespace std { using ::ptrdiff_t; using ::size_t; }# endif//  AMBULANT_NO_STD_MIN_MAX workaround  -----------------------------------------//#  ifdef AMBULANT_NO_STD_MIN_MAXnamespace std {  template <class _Tp>  inline const _Tp& min(const _Tp& __a, const _Tp& __b) {    return __b < __a ? __b : __a;  }  template <class _Tp>  inline const _Tp& max(const _Tp& __a, const _Tp& __b) {    return  __a < __b ? __b : __a;  }}#  endif// AMBULANT_STATIC_CONSTANT workaround --------------------------------------- //// On compilers which don't allow in-class initialization of static integral// constant members, we must use enums as a workaround if we want the constants// to be available at compile-time. This macro gives us a convenient way to// declare such constants.#  ifdef AMBULANT_NO_INCLASS_MEMBER_INITIALIZATION#       define AMBULANT_STATIC_CONSTANT(type, assignment) enum { assignment }#  else#     define AMBULANT_STATIC_CONSTANT(type, assignment) static const type assignment#  endif// AMBULANT_USE_FACET workaround ----------------------------------------------//// When the standard library does not have a conforming std::use_facet there// are various workarounds available, but they differ from library to library.// This macro provides a consistent way to access a locale's facets.// Usage://    replace//       std::use_facet<Type>(loc);//    with//       AMBULANT_USE_FACET(Type, loc);//    Note do not add a std:: prefix to the front of AMBULANT_USE_FACET!#if defined(AMBULANT_NO_STD_USE_FACET)#  ifdef AMBULANT_HAS_TWO_ARG_USE_FACET#     define AMBULANT_USE_FACET(Type, loc) std::use_facet(loc, static_cast<Type*>(0))#  elif defined(AMBULANT_HAS_MACRO_USE_FACET)#     define AMBULANT_USE_FACET(Type, loc) std::_USE(loc, Type)#  elif defined(AMBULANT_HAS_STLP_USE_FACET)#     define AMBULANT_USE_FACET(Type, loc) (*std::_Use_facet<Type >(loc))#  endif#else#  define AMBULANT_USE_FACET(Type, loc) std::use_facet< Type >(loc)#endif// AMBULANT_NESTED_TEMPLATE workaround ------------------------------------------//// Member templates are supported by some compilers even though they can't use// the A::template member<U> syntax, as a workaround replace://// typedef typename A::template rebind<U> binder;//// with://// typedef typename A::AMBULANT_NESTED_TEMPLATE rebind<U> binder;#ifndef AMBULANT_NO_MEMBER_TEMPLATE_KEYWORD#  define AMBULANT_NESTED_TEMPLATE template#else#  define AMBULANT_NESTED_TEMPLATE#endif// AMBULANT_UNREACHABLE_RETURN(x) workaround -------------------------------------//// Normally evaluates to nothing, unless AMBULANT_NO_UNREACHABLE_RETURN_DETECTION// is defined, in which case it evaluates to return x; Use when you have a return// statement that can never be reached.#ifdef AMBULANT_NO_UNREACHABLE_RETURN_DETECTION#  define AMBULANT_UNREACHABLE_RETURN(x) return x;#else#  define AMBULANT_UNREACHABLE_RETURN(x)#endif// AMBULANT_DEDUCED_TYPENAME workaround ------------------------------------------////// Some compilers don't support the use of `typename' for dependent// types in deduced contexts, e.g.////     template <class T> void f(T, typename T::type);//                                  ^^^^^^^^// Replace these declarations with:////     template <class T> void f(T, AMBULANT_DEDUCED_TYPENAME T::type);#ifndef AMBULANT_NO_DEDUCED_TYPENAME#  define AMBULANT_DEDUCED_TYPENAME typename#else #  define AMBULANT_DEDUCED_TYPENAME#endif// ---------------------------------------------------------------------------////// Helper macro AMBULANT_STRINGIZE:// Converts the parameter X to a string after macro replacement// on X has been performed.//#define AMBULANT_STRINGIZE(X) AMBULANT_DO_STRINGIZE(X)#define AMBULANT_DO_STRINGIZE(X) #X//// Helper macro AMBULANT_JOIN:// The following piece of macro magic joins the two // arguments together, even when one of the arguments is// itself a macro (see 16.3.1 in C++ standard).  The key// is that macro expansion of macro arguments does not// occur in AMBULANT_DO_JOIN2 but does in AMBULANT_DO_JOIN.//#define AMBULANT_JOIN( X, Y ) AMBULANT_DO_JOIN( X, Y )#define AMBULANT_DO_JOIN( X, Y ) AMBULANT_DO_JOIN2(X,Y)#define AMBULANT_DO_JOIN2( X, Y ) X##Y//// Set some default values for compiler/library/platform names.// These are for debugging config setup only://#  ifndef AMBULANT_COMPILER#     define AMBULANT_COMPILER "Unknown ISO C++ Compiler"#  endif#  ifndef AMBULANT_STDLIB#     define AMBULANT_STDLIB "Unknown ISO standard library"#  endif#  ifndef AMBULANT_PLATFORM#     if defined(unix) || defined(__unix) || defined(_XOPEN_SOURCE) \         || defined(_POSIX_SOURCE)#        define AMBULANT_PLATFORM "Generic Unix"#     else#        define AMBULANT_PLATFORM "Unknown"#     endif#  endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -