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