![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/atomic/detail/ |
Upload File : |
/* * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * Copyright (c) 2014 Andrey Semashev */ /*! * \file atomic/detail/int_sizes.hpp * * This header defines macros for testing buitin integer type sizes */ #ifndef BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_ #include <boost/atomic/detail/config.hpp> #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif // GCC and compatible compilers define internal macros with builtin type traits #if defined(__SIZEOF_SHORT__) #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT __SIZEOF_SHORT__ #endif #if defined(__SIZEOF_INT__) #define BOOST_ATOMIC_DETAIL_SIZEOF_INT __SIZEOF_INT__ #endif #if defined(__SIZEOF_LONG__) #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG __SIZEOF_LONG__ #endif #if defined(__SIZEOF_LONG_LONG__) #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG __SIZEOF_LONG_LONG__ #endif #if defined(__SIZEOF_WCHAR_T__) #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__ #endif #if defined(__SIZEOF_POINTER__) #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__ #elif defined(_MSC_VER) #if defined(_M_AMD64) || defined(_M_ARM64) || defined(_M_IA64) #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8 #else #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4 #endif #endif #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) // Try to deduce sizes from limits #include <limits.h> #include <boost/cstdint.hpp> #if (USHRT_MAX + 0) == 0xff #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 1 #elif (USHRT_MAX + 0) == 0xffff #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 2 #elif (USHRT_MAX + 0) == 0xffffffff #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 4 #elif (USHRT_MAX + 0) == UINT64_C(0xffffffffffffffff) #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 8 #endif #if (UINT_MAX + 0) == 0xff #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 1 #elif (UINT_MAX + 0) == 0xffff #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 2 #elif (UINT_MAX + 0) == 0xffffffff #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 4 #elif (UINT_MAX + 0) == UINT64_C(0xffffffffffffffff) #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 8 #endif #if (ULONG_MAX + 0) == 0xff #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 1 #elif (ULONG_MAX + 0) == 0xffff #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 2 #elif (ULONG_MAX + 0) == 0xffffffff #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 4 #elif (ULONG_MAX + 0) == UINT64_C(0xffffffffffffffff) #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 8 #endif #if defined(__hpux) // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8 #else // The list of the non-standard macros (the ones except ULLONG_MAX) is taken from cstdint.hpp #if defined(ULLONG_MAX) #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULLONG_MAX #elif defined(ULONG_LONG_MAX) #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONG_LONG_MAX #elif defined(ULONGLONG_MAX) #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONGLONG_MAX #elif defined(_LLONG_MAX) // strangely enough, this one seems to be holding the limit for the unsigned integer #define BOOST_ATOMIC_DETAIL_ULLONG_MAX _LLONG_MAX #endif #if (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xff #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 1 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffff #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 2 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffffffff #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 4 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == UINT64_C(0xffffffffffffffff) #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8 #endif #endif // defined(__hpux) #endif #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T) #include <wchar.h> #include <boost/cstdint.hpp> #if defined(_MSC_VER) && (_MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500) // MSVC 7.1 and MSVC 8 (arm) define WCHAR_MAX to a value not suitable for constant expressions #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2 #elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1 #elif (WCHAR_MAX + 0) == 0xffff || (WCHAR_MAX + 0) == 0x7fff #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2 #elif (WCHAR_MAX + 0) == 0xffffffff || (WCHAR_MAX + 0) == 0x7fffffff #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 4 #elif (WCHAR_MAX + 0) == UINT64_C(0xffffffffffffffff) || (WCHAR_MAX + 0) == INT64_C(0x7fffffffffffffff) #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 8 #endif #endif #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T) #error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers (patches are welcome). #endif #endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_