github.com/searKing/golang/go@v1.2.117/runtime/cgosymbolizer/include/boost/cstdint.hpp (about)

     1  //  boost cstdint.hpp header file  ------------------------------------------//
     2  
     3  //  (C) Copyright Beman Dawes 1999.
     4  //  (C) Copyright Jens Mauer 2001
     5  //  (C) Copyright John Maddock 2001
     6  //  Distributed under the Boost
     7  //  Software License, Version 1.0. (See accompanying file
     8  //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
     9  
    10  //  See http://www.boost.org/libs/integer for documentation.
    11  
    12  //  Revision History
    13  //   31 Oct 01  use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.)
    14  //   16 Apr 01  check LONGLONG_MAX when looking for "long long" (Jens Maurer)
    15  //   23 Jan 01  prefer "long" over "int" for int32_t and intmax_t (Jens Maurer)
    16  //   12 Nov 00  Merged <boost/stdint.h> (Jens Maurer)
    17  //   23 Sep 00  Added INTXX_C macro support (John Maddock).
    18  //   22 Sep 00  Better 64-bit support (John Maddock)
    19  //   29 Jun 00  Reimplement to avoid including stdint.h within namespace boost
    20  //    8 Aug 99  Initial version (Beman Dawes)
    21  
    22  
    23  #ifndef BOOST_CSTDINT_HPP
    24  #define BOOST_CSTDINT_HPP
    25  
    26  //
    27  // Since we always define the INT#_C macros as per C++0x,
    28  // define __STDC_CONSTANT_MACROS so that <stdint.h> does the right
    29  // thing if possible, and so that the user knows that the macros
    30  // are actually defined as per C99.
    31  //
    32  #ifndef __STDC_CONSTANT_MACROS
    33  #  define __STDC_CONSTANT_MACROS
    34  #endif
    35  
    36  #include <boost/config.hpp>
    37  //
    38  // For the following code we get several warnings along the lines of:
    39  //
    40  // boost/cstdint.hpp:428:35: error: use of C99 long long integer constant
    41  //
    42  // So we declare this a system header to suppress these warnings.
    43  // See also https://github.com/boostorg/config/issues/190
    44  //
    45  #if defined(__GNUC__) && (__GNUC__ >= 4)
    46  #pragma GCC system_header
    47  #endif
    48  
    49  //
    50  // Note that GLIBC is a bit inconsistent about whether int64_t is defined or not
    51  // depending upon what headers happen to have been included first...
    52  // so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
    53  // See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
    54  //
    55  #if defined(BOOST_HAS_STDINT_H)            \
    56    && (!defined(__GLIBC__)                  \
    57        || defined(__GLIBC_HAVE_LONG_LONG)   \
    58        || (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))
    59  
    60  // The following #include is an implementation artifact; not part of interface.
    61  # ifdef __hpux
    62  // HP-UX has a vaguely nice <stdint.h> in a non-standard location
    63  #   include <inttypes.h>
    64  #   ifdef __STDC_32_MODE__
    65        // this is triggered with GCC, because it defines __cplusplus < 199707L
    66  #     define BOOST_NO_INT64_T
    67  #   endif
    68  # elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
    69  #   include <inttypes.h>
    70  # else
    71  #   include <stdint.h>
    72  
    73  // There is a bug in Cygwin two _C macros
    74  #   if defined(INTMAX_C) && defined(__CYGWIN__)
    75  #     undef INTMAX_C
    76  #     undef UINTMAX_C
    77  #     define INTMAX_C(c) c##LL
    78  #     define UINTMAX_C(c) c##ULL
    79  #   endif
    80  
    81  # endif
    82  
    83  #if defined(__QNX__) && defined(__EXT_QNX) 
    84  
    85  // QNX (Dinkumware stdlib) defines these as non-standard names.
    86  // Reflect to the standard names.
    87  
    88  typedef ::intleast8_t int_least8_t;
    89  typedef ::intfast8_t int_fast8_t;
    90  typedef ::uintleast8_t uint_least8_t;
    91  typedef ::uintfast8_t uint_fast8_t;
    92  
    93  typedef ::intleast16_t int_least16_t;
    94  typedef ::intfast16_t int_fast16_t;
    95  typedef ::uintleast16_t uint_least16_t;
    96  typedef ::uintfast16_t uint_fast16_t;
    97  
    98  typedef ::intleast32_t int_least32_t;
    99  typedef ::intfast32_t int_fast32_t;
   100  typedef ::uintleast32_t uint_least32_t;
   101  typedef ::uintfast32_t uint_fast32_t;
   102  
   103  # ifndef BOOST_NO_INT64_T
   104  
   105  typedef ::intleast64_t int_least64_t;
   106  typedef ::intfast64_t int_fast64_t;
   107  typedef ::uintleast64_t uint_least64_t;
   108  typedef ::uintfast64_t uint_fast64_t;
   109  
   110  # endif
   111  
   112  #endif
   113  
   114  namespace boost
   115  {
   116  
   117    using ::int8_t;
   118    using ::int_least8_t;
   119    using ::int_fast8_t;
   120    using ::uint8_t;
   121    using ::uint_least8_t;
   122    using ::uint_fast8_t;
   123  
   124    using ::int16_t;
   125    using ::int_least16_t;
   126    using ::int_fast16_t;
   127    using ::uint16_t;
   128    using ::uint_least16_t;
   129    using ::uint_fast16_t;
   130  
   131    using ::int32_t;
   132    using ::int_least32_t;
   133    using ::int_fast32_t;
   134    using ::uint32_t;
   135    using ::uint_least32_t;
   136    using ::uint_fast32_t;
   137  
   138  # ifndef BOOST_NO_INT64_T
   139  
   140    using ::int64_t;
   141    using ::int_least64_t;
   142    using ::int_fast64_t;
   143    using ::uint64_t;
   144    using ::uint_least64_t;
   145    using ::uint_fast64_t;
   146  
   147  # endif
   148  
   149    using ::intmax_t;
   150    using ::uintmax_t;
   151  
   152  } // namespace boost
   153  
   154  #elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) || defined(__VMS) || defined(__SOLARIS9__) || defined(__NetBSD__)
   155  // FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.
   156  # include <inttypes.h>
   157  
   158  namespace boost {
   159  
   160    using ::int8_t;
   161    typedef int8_t int_least8_t;
   162    typedef int8_t int_fast8_t;
   163    using ::uint8_t;
   164    typedef uint8_t uint_least8_t;
   165    typedef uint8_t uint_fast8_t;
   166  
   167    using ::int16_t;
   168    typedef int16_t int_least16_t;
   169    typedef int16_t int_fast16_t;
   170    using ::uint16_t;
   171    typedef uint16_t uint_least16_t;
   172    typedef uint16_t uint_fast16_t;
   173  
   174    using ::int32_t;
   175    typedef int32_t int_least32_t;
   176    typedef int32_t int_fast32_t;
   177    using ::uint32_t;
   178    typedef uint32_t uint_least32_t;
   179    typedef uint32_t uint_fast32_t;
   180  
   181  # ifndef BOOST_NO_INT64_T
   182  
   183    using ::int64_t;
   184    typedef int64_t int_least64_t;
   185    typedef int64_t int_fast64_t;
   186    using ::uint64_t;
   187    typedef uint64_t uint_least64_t;
   188    typedef uint64_t uint_fast64_t;
   189  
   190    typedef int64_t intmax_t;
   191    typedef uint64_t uintmax_t;
   192  
   193  # else
   194  
   195    typedef int32_t intmax_t;
   196    typedef uint32_t uintmax_t;
   197  
   198  # endif
   199  
   200  } // namespace boost
   201  
   202  #else  // BOOST_HAS_STDINT_H
   203  
   204  # include <boost/limits.hpp> // implementation artifact; not part of interface
   205  # include <limits.h>         // needed for limits macros
   206  
   207  
   208  namespace boost
   209  {
   210  
   211  //  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
   212  //  platforms.  For other systems, they will have to be hand tailored.
   213  //
   214  //  Because the fast types are assumed to be the same as the undecorated types,
   215  //  it may be possible to hand tailor a more efficient implementation.  Such
   216  //  an optimization may be illusionary; on the Intel x86-family 386 on, for
   217  //  example, byte arithmetic and load/stores are as fast as "int" sized ones.
   218  
   219  //  8-bit types  ------------------------------------------------------------//
   220  
   221  # if UCHAR_MAX == 0xff
   222       typedef signed char     int8_t;
   223       typedef signed char     int_least8_t;
   224       typedef signed char     int_fast8_t;
   225       typedef unsigned char   uint8_t;
   226       typedef unsigned char   uint_least8_t;
   227       typedef unsigned char   uint_fast8_t;
   228  # else
   229  #    error defaults not correct; you must hand modify boost/cstdint.hpp
   230  # endif
   231  
   232  //  16-bit types  -----------------------------------------------------------//
   233  
   234  # if USHRT_MAX == 0xffff
   235  #  if defined(__crayx1)
   236       // The Cray X1 has a 16-bit short, however it is not recommend
   237       // for use in performance critical code.
   238       typedef short           int16_t;
   239       typedef short           int_least16_t;
   240       typedef int             int_fast16_t;
   241       typedef unsigned short  uint16_t;
   242       typedef unsigned short  uint_least16_t;
   243       typedef unsigned int    uint_fast16_t;
   244  #  else
   245       typedef short           int16_t;
   246       typedef short           int_least16_t;
   247       typedef short           int_fast16_t;
   248       typedef unsigned short  uint16_t;
   249       typedef unsigned short  uint_least16_t;
   250       typedef unsigned short  uint_fast16_t;
   251  #  endif
   252  # elif (USHRT_MAX == 0xffffffff) && defined(__MTA__)
   253        // On MTA / XMT short is 32 bits unless the -short16 compiler flag is specified
   254        // MTA / XMT does support the following non-standard integer types
   255        typedef __short16           int16_t;
   256        typedef __short16           int_least16_t;
   257        typedef __short16           int_fast16_t;
   258        typedef unsigned __short16  uint16_t;
   259        typedef unsigned __short16  uint_least16_t;
   260        typedef unsigned __short16  uint_fast16_t;
   261  # elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
   262       // no 16-bit types on Cray:
   263       typedef short           int_least16_t;
   264       typedef short           int_fast16_t;
   265       typedef unsigned short  uint_least16_t;
   266       typedef unsigned short  uint_fast16_t;
   267  # else
   268  #    error defaults not correct; you must hand modify boost/cstdint.hpp
   269  # endif
   270  
   271  //  32-bit types  -----------------------------------------------------------//
   272  
   273  # if UINT_MAX == 0xffffffff
   274       typedef int             int32_t;
   275       typedef int             int_least32_t;
   276       typedef int             int_fast32_t;
   277       typedef unsigned int    uint32_t;
   278       typedef unsigned int    uint_least32_t;
   279       typedef unsigned int    uint_fast32_t;
   280  # elif (USHRT_MAX == 0xffffffff)
   281       typedef short             int32_t;
   282       typedef short             int_least32_t;
   283       typedef short             int_fast32_t;
   284       typedef unsigned short    uint32_t;
   285       typedef unsigned short    uint_least32_t;
   286       typedef unsigned short    uint_fast32_t;
   287  # elif ULONG_MAX == 0xffffffff
   288       typedef long            int32_t;
   289       typedef long            int_least32_t;
   290       typedef long            int_fast32_t;
   291       typedef unsigned long   uint32_t;
   292       typedef unsigned long   uint_least32_t;
   293       typedef unsigned long   uint_fast32_t;
   294  # elif (UINT_MAX == 0xffffffffffffffff) && defined(__MTA__)
   295        // Integers are 64 bits on the MTA / XMT
   296        typedef __int32           int32_t;
   297        typedef __int32           int_least32_t;
   298        typedef __int32           int_fast32_t;
   299        typedef unsigned __int32  uint32_t;
   300        typedef unsigned __int32  uint_least32_t;
   301        typedef unsigned __int32  uint_fast32_t;
   302  # else
   303  #    error defaults not correct; you must hand modify boost/cstdint.hpp
   304  # endif
   305  
   306  //  64-bit types + intmax_t and uintmax_t  ----------------------------------//
   307  
   308  # if defined(BOOST_HAS_LONG_LONG) && \
   309     !defined(BOOST_MSVC) && !defined(BOOST_BORLANDC) && \
   310     (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \
   311     (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
   312  #    if defined(__hpux)
   313       // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
   314  #    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)
   315                                                                   // 2**64 - 1
   316  #    else
   317  #       error defaults not correct; you must hand modify boost/cstdint.hpp
   318  #    endif
   319  
   320       typedef  ::boost::long_long_type            intmax_t;
   321       typedef  ::boost::ulong_long_type   uintmax_t;
   322       typedef  ::boost::long_long_type            int64_t;
   323       typedef  ::boost::long_long_type            int_least64_t;
   324       typedef  ::boost::long_long_type            int_fast64_t;
   325       typedef  ::boost::ulong_long_type   uint64_t;
   326       typedef  ::boost::ulong_long_type   uint_least64_t;
   327       typedef  ::boost::ulong_long_type   uint_fast64_t;
   328  
   329  # elif ULONG_MAX != 0xffffffff
   330  
   331  #    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
   332       typedef long                 intmax_t;
   333       typedef unsigned long        uintmax_t;
   334       typedef long                 int64_t;
   335       typedef long                 int_least64_t;
   336       typedef long                 int_fast64_t;
   337       typedef unsigned long        uint64_t;
   338       typedef unsigned long        uint_least64_t;
   339       typedef unsigned long        uint_fast64_t;
   340  #    else
   341  #       error defaults not correct; you must hand modify boost/cstdint.hpp
   342  #    endif
   343  # elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
   344       __extension__ typedef long long            intmax_t;
   345       __extension__ typedef unsigned long long   uintmax_t;
   346       __extension__ typedef long long            int64_t;
   347       __extension__ typedef long long            int_least64_t;
   348       __extension__ typedef long long            int_fast64_t;
   349       __extension__ typedef unsigned long long   uint64_t;
   350       __extension__ typedef unsigned long long   uint_least64_t;
   351       __extension__ typedef unsigned long long   uint_fast64_t;
   352  # elif defined(BOOST_HAS_MS_INT64)
   353       //
   354       // we have Borland/Intel/Microsoft __int64:
   355       //
   356       typedef __int64             intmax_t;
   357       typedef unsigned __int64    uintmax_t;
   358       typedef __int64             int64_t;
   359       typedef __int64             int_least64_t;
   360       typedef __int64             int_fast64_t;
   361       typedef unsigned __int64    uint64_t;
   362       typedef unsigned __int64    uint_least64_t;
   363       typedef unsigned __int64    uint_fast64_t;
   364  # else // assume no 64-bit integers
   365  #  define BOOST_NO_INT64_T
   366       typedef int32_t              intmax_t;
   367       typedef uint32_t             uintmax_t;
   368  # endif
   369  
   370  } // namespace boost
   371  
   372  
   373  #endif // BOOST_HAS_STDINT_H
   374  
   375  // intptr_t/uintptr_t are defined separately because they are optional and not universally available
   376  #if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)
   377  // Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h
   378  #include <stddef.h>
   379  #endif
   380  
   381  #if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
   382      || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
   383      || defined(__CYGWIN__) || defined(__VXWORKS__) \
   384      || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
   385      || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || (defined(sun) && !defined(BOOST_HAS_STDINT_H)) || defined(INTPTR_MAX)
   386  
   387  namespace boost {
   388      using ::intptr_t;
   389      using ::uintptr_t;
   390  }
   391  #define BOOST_HAS_INTPTR_T
   392  
   393  // Clang pretends to be GCC, so it'll match this condition
   394  #elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
   395  
   396  namespace boost {
   397      typedef __INTPTR_TYPE__ intptr_t;
   398      typedef __UINTPTR_TYPE__ uintptr_t;
   399  }
   400  #define BOOST_HAS_INTPTR_T
   401  
   402  #endif
   403  
   404  #endif // BOOST_CSTDINT_HPP
   405  
   406  
   407  /****************************************************
   408  
   409  Macro definition section:
   410  
   411  Added 23rd September 2000 (John Maddock).
   412  Modified 11th September 2001 to be excluded when
   413  BOOST_HAS_STDINT_H is defined (John Maddock).
   414  Modified 11th Dec 2009 to always define the
   415  INT#_C macros if they're not already defined (John Maddock).
   416  
   417  ******************************************************/
   418  
   419  #if !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && \
   420     (!defined(INT8_C) || !defined(INT16_C) || !defined(INT32_C) || !defined(INT64_C))
   421  //
   422  // Undef the macros as a precaution, since we may get here if <stdint.h> has failed
   423  // to define them all, see https://svn.boost.org/trac/boost/ticket/12786
   424  //
   425  #undef INT8_C
   426  #undef INT16_C
   427  #undef INT32_C
   428  #undef INT64_C
   429  #undef INTMAX_C
   430  #undef UINT8_C
   431  #undef UINT16_C
   432  #undef UINT32_C
   433  #undef UINT64_C
   434  #undef UINTMAX_C
   435  
   436  #include <limits.h>
   437  # define BOOST__STDC_CONSTANT_MACROS_DEFINED
   438  # if defined(BOOST_HAS_MS_INT64)
   439  //
   440  // Borland/Intel/Microsoft compilers have width specific suffixes:
   441  //
   442  #ifndef INT8_C
   443  #  define INT8_C(value)     value##i8
   444  #endif
   445  #ifndef INT16_C
   446  #  define INT16_C(value)    value##i16
   447  #endif
   448  #ifndef INT32_C
   449  #  define INT32_C(value)    value##i32
   450  #endif
   451  #ifndef INT64_C
   452  #  define INT64_C(value)    value##i64
   453  #endif
   454  #  ifdef BOOST_BORLANDC
   455      // Borland bug: appending ui8 makes the type a signed char
   456  #   define UINT8_C(value)    static_cast<unsigned char>(value##u)
   457  #  else
   458  #   define UINT8_C(value)    value##ui8
   459  #  endif
   460  #ifndef UINT16_C
   461  #  define UINT16_C(value)   value##ui16
   462  #endif
   463  #ifndef UINT32_C
   464  #  define UINT32_C(value)   value##ui32
   465  #endif
   466  #ifndef UINT64_C
   467  #  define UINT64_C(value)   value##ui64
   468  #endif
   469  #ifndef INTMAX_C
   470  #  define INTMAX_C(value)   value##i64
   471  #  define UINTMAX_C(value)  value##ui64
   472  #endif
   473  
   474  # else
   475  //  do it the old fashioned way:
   476  
   477  //  8-bit types  ------------------------------------------------------------//
   478  
   479  #  if (UCHAR_MAX == 0xff) && !defined(INT8_C)
   480  #   define INT8_C(value) static_cast<boost::int8_t>(value)
   481  #   define UINT8_C(value) static_cast<boost::uint8_t>(value##u)
   482  #  endif
   483  
   484  //  16-bit types  -----------------------------------------------------------//
   485  
   486  #  if (USHRT_MAX == 0xffff) && !defined(INT16_C)
   487  #   define INT16_C(value) static_cast<boost::int16_t>(value)
   488  #   define UINT16_C(value) static_cast<boost::uint16_t>(value##u)
   489  #  endif
   490  
   491  //  32-bit types  -----------------------------------------------------------//
   492  #ifndef INT32_C
   493  #  if (UINT_MAX == 0xffffffff)
   494  #   define INT32_C(value) value
   495  #   define UINT32_C(value) value##u
   496  #  elif ULONG_MAX == 0xffffffff
   497  #   define INT32_C(value) value##L
   498  #   define UINT32_C(value) value##uL
   499  #  endif
   500  #endif
   501  
   502  //  64-bit types + intmax_t and uintmax_t  ----------------------------------//
   503  #ifndef INT64_C
   504  #  if defined(BOOST_HAS_LONG_LONG) && \
   505      (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX) || defined(_ULLONG_MAX) || defined(_LLONG_MAX))
   506  
   507  #    if defined(__hpux)
   508          // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
   509  #       define INT64_C(value) value##LL
   510  #       define UINT64_C(value) value##uLL
   511  #    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) ||  \
   512          (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) ||  \
   513          (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL) || \
   514          (defined(_ULLONG_MAX) && _ULLONG_MAX == 18446744073709551615ULL) || \
   515          (defined(_LLONG_MAX) && _LLONG_MAX == 9223372036854775807LL)
   516  
   517  #       define INT64_C(value) value##LL
   518  #       define UINT64_C(value) value##uLL
   519  #    else
   520  #       error defaults not correct; you must hand modify boost/cstdint.hpp
   521  #    endif
   522  #  elif ULONG_MAX != 0xffffffff
   523  
   524  #    if ULONG_MAX == 18446744073709551615U // 2**64 - 1
   525  #       define INT64_C(value) value##L
   526  #       define UINT64_C(value) value##uL
   527  #    else
   528  #       error defaults not correct; you must hand modify boost/cstdint.hpp
   529  #    endif
   530  #  elif defined(BOOST_HAS_LONG_LONG)
   531       // Usual macros not defined, work things out for ourselves:
   532  #    if(~0uLL == 18446744073709551615ULL)
   533  #       define INT64_C(value) value##LL
   534  #       define UINT64_C(value) value##uLL
   535  #    else
   536  #       error defaults not correct; you must hand modify boost/cstdint.hpp
   537  #    endif
   538  #  else
   539  #    error defaults not correct; you must hand modify boost/cstdint.hpp
   540  #  endif
   541  
   542  #  ifdef BOOST_NO_INT64_T
   543  #   define INTMAX_C(value) INT32_C(value)
   544  #   define UINTMAX_C(value) UINT32_C(value)
   545  #  else
   546  #   define INTMAX_C(value) INT64_C(value)
   547  #   define UINTMAX_C(value) UINT64_C(value)
   548  #  endif
   549  #endif
   550  # endif // Borland/Microsoft specific width suffixes
   551  
   552  #endif // INT#_C macros.
   553  
   554  
   555  
   556