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