epoc32/include/stdapis/boost/cstdint.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     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 #include <boost/config.hpp>
    27 
    28 
    29 #ifdef BOOST_HAS_STDINT_H
    30 
    31 // The following #include is an implementation artifact; not part of interface.
    32 # ifdef __hpux
    33 // HP-UX has a vaguely nice <stdint.h> in a non-standard location
    34 #   include <inttypes.h>
    35 #   ifdef __STDC_32_MODE__
    36       // this is triggered with GCC, because it defines __cplusplus < 199707L
    37 #     define BOOST_NO_INT64_T
    38 #   endif 
    39 # elif defined(__FreeBSD__) || defined(__IBMCPP__)
    40 #   include <inttypes.h>
    41 # else
    42 #   include <stdint.h>
    43 
    44 // There is a bug in Cygwin two _C macros
    45 #   if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)
    46 #     undef INTMAX_C
    47 #     undef UINTMAX_C
    48 #     define INTMAX_C(c) c##LL
    49 #     define UINTMAX_C(c) c##ULL
    50 #   endif
    51 
    52 # endif
    53 
    54 #ifdef __QNX__
    55 
    56 // QNX (Dinkumware stdlib) defines these as non-standard names.
    57 // Reflect to the standard names.
    58 
    59 typedef ::intleast8_t int_least8_t;
    60 typedef ::intfast8_t int_fast8_t;
    61 typedef ::uintleast8_t uint_least8_t;
    62 typedef ::uintfast8_t uint_fast8_t;
    63 
    64 typedef ::intleast16_t int_least16_t;
    65 typedef ::intfast16_t int_fast16_t;
    66 typedef ::uintleast16_t uint_least16_t;
    67 typedef ::uintfast16_t uint_fast16_t;
    68 
    69 typedef ::intleast32_t int_least32_t;
    70 typedef ::intfast32_t int_fast32_t;
    71 typedef ::uintleast32_t uint_least32_t;
    72 typedef ::uintfast32_t uint_fast32_t;
    73 
    74 # ifndef BOOST_NO_INT64_T
    75 
    76 typedef ::intleast64_t int_least64_t;
    77 typedef ::intfast64_t int_fast64_t;
    78 typedef ::uintleast64_t uint_least64_t;
    79 typedef ::uintfast64_t uint_fast64_t;
    80 
    81 # endif
    82 
    83 #endif
    84 
    85 namespace boost
    86 {
    87 
    88   using ::int8_t;             
    89   using ::int_least8_t;       
    90   using ::int_fast8_t;        
    91   using ::uint8_t;            
    92   using ::uint_least8_t;      
    93   using ::uint_fast8_t;       
    94                      
    95   using ::int16_t;            
    96   using ::int_least16_t;      
    97   using ::int_fast16_t;       
    98   using ::uint16_t;           
    99   using ::uint_least16_t;     
   100   using ::uint_fast16_t;      
   101                      
   102   using ::int32_t;            
   103   using ::int_least32_t;      
   104   using ::int_fast32_t;       
   105   using ::uint32_t;           
   106   using ::uint_least32_t;     
   107   using ::uint_fast32_t;      
   108                      
   109 # ifndef BOOST_NO_INT64_T
   110 
   111   using ::int64_t;            
   112   using ::int_least64_t;      
   113   using ::int_fast64_t;       
   114   using ::uint64_t;           
   115   using ::uint_least64_t;     
   116   using ::uint_fast64_t;      
   117                      
   118 # endif
   119 
   120   using ::intmax_t;      
   121   using ::uintmax_t;     
   122 
   123 } // namespace boost
   124 
   125 #elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__)
   126 // FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need.
   127 # include <inttypes.h>
   128 
   129 namespace boost {
   130 
   131   using ::int8_t;             
   132   typedef int8_t int_least8_t;       
   133   typedef int8_t int_fast8_t;        
   134   using ::uint8_t;            
   135   typedef uint8_t uint_least8_t;      
   136   typedef uint8_t uint_fast8_t;       
   137                      
   138   using ::int16_t;            
   139   typedef int16_t int_least16_t;      
   140   typedef int16_t int_fast16_t;       
   141   using ::uint16_t;           
   142   typedef uint16_t uint_least16_t;     
   143   typedef uint16_t uint_fast16_t;      
   144                      
   145   using ::int32_t;            
   146   typedef int32_t int_least32_t;      
   147   typedef int32_t int_fast32_t;       
   148   using ::uint32_t;           
   149   typedef uint32_t uint_least32_t;     
   150   typedef uint32_t uint_fast32_t;      
   151          
   152 # ifndef BOOST_NO_INT64_T          
   153 
   154   using ::int64_t;            
   155   typedef int64_t int_least64_t;      
   156   typedef int64_t int_fast64_t;       
   157   using ::uint64_t;           
   158   typedef uint64_t uint_least64_t;     
   159   typedef uint64_t uint_fast64_t;      
   160 
   161   typedef int64_t intmax_t;
   162   typedef uint64_t uintmax_t;
   163 
   164 # else
   165 
   166   typedef int32_t intmax_t;
   167   typedef uint32_t uintmax_t;
   168 
   169 # endif
   170 
   171 } // namespace boost
   172 
   173 #else  // BOOST_HAS_STDINT_H
   174 
   175 # include <boost/limits.hpp> // implementation artifact; not part of interface
   176 # include <limits.h>         // needed for limits macros
   177 
   178 
   179 namespace boost
   180 {
   181 
   182 //  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
   183 //  platforms.  For other systems, they will have to be hand tailored.
   184 //
   185 //  Because the fast types are assumed to be the same as the undecorated types,
   186 //  it may be possible to hand tailor a more efficient implementation.  Such
   187 //  an optimization may be illusionary; on the Intel x86-family 386 on, for
   188 //  example, byte arithmetic and load/stores are as fast as "int" sized ones.
   189 
   190 //  8-bit types  ------------------------------------------------------------//
   191 
   192 # if UCHAR_MAX == 0xff
   193      typedef signed char     int8_t;
   194      typedef signed char     int_least8_t;
   195      typedef signed char     int_fast8_t;
   196      typedef unsigned char   uint8_t;
   197      typedef unsigned char   uint_least8_t;
   198      typedef unsigned char   uint_fast8_t;
   199 # else
   200 #    error defaults not correct; you must hand modify boost/cstdint.hpp
   201 # endif
   202 
   203 //  16-bit types  -----------------------------------------------------------//
   204 
   205 # if USHRT_MAX == 0xffff
   206 #  if defined(__crayx1)
   207      // The Cray X1 has a 16-bit short, however it is not recommend
   208      // for use in performance critical code.
   209      typedef short           int16_t;
   210      typedef short           int_least16_t;
   211      typedef int             int_fast16_t;
   212      typedef unsigned short  uint16_t;
   213      typedef unsigned short  uint_least16_t;
   214      typedef unsigned int    uint_fast16_t;
   215 #  else
   216      typedef short           int16_t;
   217      typedef short           int_least16_t;
   218      typedef short           int_fast16_t;
   219      typedef unsigned short  uint16_t;
   220      typedef unsigned short  uint_least16_t;
   221      typedef unsigned short  uint_fast16_t;
   222 #  endif
   223 # elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
   224      // no 16-bit types on Cray:
   225      typedef short           int_least16_t;
   226      typedef short           int_fast16_t;
   227      typedef unsigned short  uint_least16_t;
   228      typedef unsigned short  uint_fast16_t;
   229 # else
   230 #    error defaults not correct; you must hand modify boost/cstdint.hpp
   231 # endif
   232 
   233 //  32-bit types  -----------------------------------------------------------//
   234 
   235 # if ULONG_MAX == 0xffffffff
   236      typedef long            int32_t;
   237      typedef long            int_least32_t;
   238      typedef long            int_fast32_t;
   239      typedef unsigned long   uint32_t;
   240      typedef unsigned long   uint_least32_t;
   241      typedef unsigned long   uint_fast32_t;
   242 # elif UINT_MAX == 0xffffffff
   243      typedef int             int32_t;
   244      typedef int             int_least32_t;
   245      typedef int             int_fast32_t;
   246      typedef unsigned int    uint32_t;
   247      typedef unsigned int    uint_least32_t;
   248      typedef unsigned int    uint_fast32_t;
   249 # else
   250 #    error defaults not correct; you must hand modify boost/cstdint.hpp
   251 # endif
   252 
   253 //  64-bit types + intmax_t and uintmax_t  ----------------------------------//
   254 
   255 # if defined(BOOST_HAS_LONG_LONG) && \
   256    !defined(BOOST_MSVC) && !defined(__BORLANDC__) && \
   257    (!defined(__GLIBCPP__) || defined(_GLIBCPP_USE_LONG_LONG)) && \
   258    (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
   259 #    if defined(__hpux)
   260      // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
   261 #    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615ULL) || (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615ULL) || (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615ULL)
   262                                                                  // 2**64 - 1
   263 #    else
   264 #       error defaults not correct; you must hand modify boost/cstdint.hpp
   265 #    endif
   266 
   267      typedef  ::boost::long_long_type            intmax_t;
   268      typedef  ::boost::ulong_long_type   uintmax_t;
   269      typedef  ::boost::long_long_type            int64_t;
   270      typedef  ::boost::long_long_type            int_least64_t;
   271      typedef  ::boost::long_long_type            int_fast64_t;
   272      typedef  ::boost::ulong_long_type   uint64_t;
   273      typedef  ::boost::ulong_long_type   uint_least64_t;
   274      typedef  ::boost::ulong_long_type   uint_fast64_t;
   275 
   276 # elif ULONG_MAX != 0xffffffff
   277 
   278 #    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
   279      typedef long                 intmax_t;
   280      typedef unsigned long        uintmax_t;
   281      typedef long                 int64_t;
   282      typedef long                 int_least64_t;
   283      typedef long                 int_fast64_t;
   284      typedef unsigned long        uint64_t;
   285      typedef unsigned long        uint_least64_t;
   286      typedef unsigned long        uint_fast64_t;
   287 #    else
   288 #       error defaults not correct; you must hand modify boost/cstdint.hpp
   289 #    endif
   290 # elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
   291      __extension__ typedef long long            intmax_t;
   292      __extension__ typedef unsigned long long   uintmax_t;
   293      __extension__ typedef long long            int64_t;
   294      __extension__ typedef long long            int_least64_t;
   295      __extension__ typedef long long            int_fast64_t;
   296      __extension__ typedef unsigned long long   uint64_t;
   297      __extension__ typedef unsigned long long   uint_least64_t;
   298      __extension__ typedef unsigned long long   uint_fast64_t;
   299 # elif defined(BOOST_HAS_MS_INT64)
   300      //
   301      // we have Borland/Intel/Microsoft __int64:
   302      //
   303      typedef __int64             intmax_t;
   304      typedef unsigned __int64    uintmax_t;
   305      typedef __int64             int64_t;
   306      typedef __int64             int_least64_t;
   307      typedef __int64             int_fast64_t;
   308      typedef unsigned __int64    uint64_t;
   309      typedef unsigned __int64    uint_least64_t;
   310      typedef unsigned __int64    uint_fast64_t;
   311 # else // assume no 64-bit integers
   312 #  define BOOST_NO_INT64_T
   313      typedef int32_t              intmax_t;
   314      typedef uint32_t             uintmax_t;
   315 # endif
   316 
   317 } // namespace boost
   318 
   319 
   320 #endif // BOOST_HAS_STDINT_H
   321 
   322 #endif // BOOST_CSTDINT_HPP
   323 
   324 
   325 /****************************************************
   326 
   327 Macro definition section:
   328 
   329 Define various INTXX_C macros only if
   330 __STDC_CONSTANT_MACROS is defined.
   331 
   332 Undefine the macros if __STDC_CONSTANT_MACROS is
   333 not defined and the macros are (cf <cassert>).
   334 
   335 Added 23rd September 2000 (John Maddock).
   336 Modified 11th September 2001 to be excluded when
   337 BOOST_HAS_STDINT_H is defined (John Maddock).
   338 
   339 ******************************************************/
   340 
   341 #if defined(__STDC_CONSTANT_MACROS) && !defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(BOOST_HAS_STDINT_H)
   342 # define BOOST__STDC_CONSTANT_MACROS_DEFINED
   343 # if defined(BOOST_HAS_MS_INT64)
   344 //
   345 // Borland/Intel/Microsoft compilers have width specific suffixes:
   346 //
   347 #  define INT8_C(value)     value##i8
   348 #  define INT16_C(value)    value##i16
   349 #  define INT32_C(value)    value##i32
   350 #  define INT64_C(value)    value##i64
   351 #  ifdef __BORLANDC__
   352     // Borland bug: appending ui8 makes the type a signed char
   353 #   define UINT8_C(value)    static_cast<unsigned char>(value##u)
   354 #  else
   355 #   define UINT8_C(value)    value##ui8
   356 #  endif
   357 #  define UINT16_C(value)   value##ui16
   358 #  define UINT32_C(value)   value##ui32
   359 #  define UINT64_C(value)   value##ui64
   360 #  define INTMAX_C(value)   value##i64
   361 #  define UINTMAX_C(value)  value##ui64
   362 
   363 # else
   364 //  do it the old fashioned way:
   365 
   366 //  8-bit types  ------------------------------------------------------------//
   367 
   368 #  if UCHAR_MAX == 0xff
   369 #   define INT8_C(value) static_cast<boost::int8_t>(value)
   370 #   define UINT8_C(value) static_cast<boost::uint8_t>(value##u)
   371 #  endif
   372 
   373 //  16-bit types  -----------------------------------------------------------//
   374 
   375 #  if USHRT_MAX == 0xffff
   376 #   define INT16_C(value) static_cast<boost::int16_t>(value)
   377 #   define UINT16_C(value) static_cast<boost::uint16_t>(value##u)
   378 #  endif
   379 
   380 //  32-bit types  -----------------------------------------------------------//
   381 
   382 #  if UINT_MAX == 0xffffffff
   383 #   define INT32_C(value) value
   384 #   define UINT32_C(value) value##u
   385 #  elif ULONG_MAX == 0xffffffff
   386 #   define INT32_C(value) value##L
   387 #   define UINT32_C(value) value##uL
   388 #  endif
   389 
   390 //  64-bit types + intmax_t and uintmax_t  ----------------------------------//
   391 
   392 #  if defined(BOOST_HAS_LONG_LONG) && \
   393     (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) || defined(ULONGLONG_MAX))
   394 
   395 #    if defined(__hpux)
   396      // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
   397 #    elif (defined(ULLONG_MAX) && ULLONG_MAX == 18446744073709551615U) ||  \
   398         (defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 18446744073709551615U) ||  \
   399         (defined(ULONGLONG_MAX) && ULONGLONG_MAX == 18446744073709551615U)
   400 
   401 #    else
   402 #       error defaults not correct; you must hand modify boost/cstdint.hpp
   403 #    endif
   404 #    define INT64_C(value) value##LL
   405 #    define UINT64_C(value) value##uLL
   406 #  elif ULONG_MAX != 0xffffffff
   407 
   408 #    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
   409 #       define INT64_C(value) value##L
   410 #       define UINT64_C(value) value##uL
   411 #    else
   412 #       error defaults not correct; you must hand modify boost/cstdint.hpp
   413 #    endif
   414 #  endif
   415 
   416 #  ifdef BOOST_NO_INT64_T
   417 #   define INTMAX_C(value) INT32_C(value)
   418 #   define UINTMAX_C(value) UINT32_C(value)
   419 #  else
   420 #   define INTMAX_C(value) INT64_C(value)
   421 #   define UINTMAX_C(value) UINT64_C(value)
   422 #  endif
   423 
   424 # endif // Borland/Microsoft specific width suffixes
   425 
   426 
   427 #elif defined(BOOST__STDC_CONSTANT_MACROS_DEFINED) && !defined(__STDC_CONSTANT_MACROS) && !defined(BOOST_HAS_STDINT_H)
   428 //
   429 // undef all the macros:
   430 //
   431 # undef INT8_C
   432 # undef INT16_C
   433 # undef INT32_C
   434 # undef INT64_C
   435 # undef UINT8_C
   436 # undef UINT16_C
   437 # undef UINT32_C
   438 # undef UINT64_C
   439 # undef INTMAX_C
   440 # undef UINTMAX_C
   441 
   442 #endif // __STDC_CONSTANT_MACROS_DEFINED etc.
   443 
   444 
   445 
   446