annotate DEPENDENCIES/generic/include/boost/atomic/detail/int_sizes.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 /*
Chris@102 2 * Distributed under the Boost Software License, Version 1.0.
Chris@102 3 * (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 4 * http://www.boost.org/LICENSE_1_0.txt)
Chris@102 5 *
Chris@102 6 * Copyright (c) 2014 Andrey Semashev
Chris@102 7 */
Chris@102 8 /*!
Chris@102 9 * \file atomic/detail/int_sizes.hpp
Chris@102 10 *
Chris@102 11 * This header defines macros for testing buitin integer type sizes
Chris@102 12 */
Chris@102 13
Chris@102 14 #ifndef BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
Chris@102 15 #define BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_
Chris@102 16
Chris@102 17 #include <boost/atomic/detail/config.hpp>
Chris@102 18
Chris@102 19 #ifdef BOOST_HAS_PRAGMA_ONCE
Chris@102 20 #pragma once
Chris@102 21 #endif
Chris@102 22
Chris@102 23 // GCC and compatible compilers define internal macros with builtin type traits
Chris@102 24 #if defined(__SIZEOF_SHORT__)
Chris@102 25 #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT __SIZEOF_SHORT__
Chris@102 26 #endif
Chris@102 27 #if defined(__SIZEOF_INT__)
Chris@102 28 #define BOOST_ATOMIC_DETAIL_SIZEOF_INT __SIZEOF_INT__
Chris@102 29 #endif
Chris@102 30 #if defined(__SIZEOF_LONG__)
Chris@102 31 #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG __SIZEOF_LONG__
Chris@102 32 #endif
Chris@102 33 #if defined(__SIZEOF_LONG_LONG__)
Chris@102 34 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG __SIZEOF_LONG_LONG__
Chris@102 35 #endif
Chris@102 36 #if defined(__SIZEOF_WCHAR_T__)
Chris@102 37 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T __SIZEOF_WCHAR_T__
Chris@102 38 #endif
Chris@102 39 #if defined(__SIZEOF_POINTER__)
Chris@102 40 #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__
Chris@102 41 #elif defined(_MSC_VER)
Chris@102 42 #if defined(_M_AMD64) || defined(_M_IA64)
Chris@102 43 #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8
Chris@102 44 #else
Chris@102 45 #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4
Chris@102 46 #endif
Chris@102 47 #endif
Chris@102 48
Chris@102 49 #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
Chris@102 50 !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG)
Chris@102 51
Chris@102 52 // Try to deduce sizes from limits
Chris@102 53 #include <limits.h>
Chris@102 54 #include <boost/cstdint.hpp>
Chris@102 55
Chris@102 56 #if (USHRT_MAX + 0) == 0xff
Chris@102 57 #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 1
Chris@102 58 #elif (USHRT_MAX + 0) == 0xffff
Chris@102 59 #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 2
Chris@102 60 #elif (USHRT_MAX + 0) == 0xffffffff
Chris@102 61 #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 4
Chris@102 62 #elif (USHRT_MAX + 0) == UINT64_C(0xffffffffffffffff)
Chris@102 63 #define BOOST_ATOMIC_DETAIL_SIZEOF_SHORT 8
Chris@102 64 #endif
Chris@102 65
Chris@102 66 #if (UINT_MAX + 0) == 0xff
Chris@102 67 #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 1
Chris@102 68 #elif (UINT_MAX + 0) == 0xffff
Chris@102 69 #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 2
Chris@102 70 #elif (UINT_MAX + 0) == 0xffffffff
Chris@102 71 #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 4
Chris@102 72 #elif (UINT_MAX + 0) == UINT64_C(0xffffffffffffffff)
Chris@102 73 #define BOOST_ATOMIC_DETAIL_SIZEOF_INT 8
Chris@102 74 #endif
Chris@102 75
Chris@102 76 #if (ULONG_MAX + 0) == 0xff
Chris@102 77 #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 1
Chris@102 78 #elif (ULONG_MAX + 0) == 0xffff
Chris@102 79 #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 2
Chris@102 80 #elif (ULONG_MAX + 0) == 0xffffffff
Chris@102 81 #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 4
Chris@102 82 #elif (ULONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
Chris@102 83 #define BOOST_ATOMIC_DETAIL_SIZEOF_LONG 8
Chris@102 84 #endif
Chris@102 85
Chris@102 86 #if defined(__hpux) // HP-UX's value of ULONG_LONG_MAX is unusable in preprocessor expressions
Chris@102 87 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
Chris@102 88 #else
Chris@102 89
Chris@102 90 // The list of the non-standard macros (the ones except ULLONG_MAX) is taken from cstdint.hpp
Chris@102 91 #if defined(ULLONG_MAX)
Chris@102 92 #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULLONG_MAX
Chris@102 93 #elif defined(ULONG_LONG_MAX)
Chris@102 94 #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONG_LONG_MAX
Chris@102 95 #elif defined(ULONGLONG_MAX)
Chris@102 96 #define BOOST_ATOMIC_DETAIL_ULLONG_MAX ULONGLONG_MAX
Chris@102 97 #elif defined(_LLONG_MAX) // strangely enough, this one seems to be holding the limit for the unsigned integer
Chris@102 98 #define BOOST_ATOMIC_DETAIL_ULLONG_MAX _LLONG_MAX
Chris@102 99 #endif
Chris@102 100
Chris@102 101 #if (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xff
Chris@102 102 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 1
Chris@102 103 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffff
Chris@102 104 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 2
Chris@102 105 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == 0xffffffff
Chris@102 106 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 4
Chris@102 107 #elif (BOOST_ATOMIC_DETAIL_ULLONG_MAX + 0) == UINT64_C(0xffffffffffffffff)
Chris@102 108 #define BOOST_ATOMIC_DETAIL_SIZEOF_LLONG 8
Chris@102 109 #endif
Chris@102 110
Chris@102 111 #endif // defined(__hpux)
Chris@102 112
Chris@102 113 #endif
Chris@102 114
Chris@102 115 #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
Chris@102 116
Chris@102 117 #include <wchar.h>
Chris@102 118 #include <boost/cstdint.hpp>
Chris@102 119
Chris@102 120 #if defined(_MSC_VER) && _MSC_VER <= 1310
Chris@102 121 // MSVC 7.1 defines WCHAR_MAX to a value not suitable for constant expressions
Chris@102 122 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
Chris@102 123 #elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f
Chris@102 124 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 1
Chris@102 125 #elif (WCHAR_MAX + 0) == 0xffff || (WCHAR_MAX + 0) == 0x7fff
Chris@102 126 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2
Chris@102 127 #elif (WCHAR_MAX + 0) == 0xffffffff || (WCHAR_MAX + 0) == 0x7fffffff
Chris@102 128 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 4
Chris@102 129 #elif (WCHAR_MAX + 0) == UINT64_C(0xffffffffffffffff) || (WCHAR_MAX + 0) == INT64_C(0x7fffffffffffffff)
Chris@102 130 #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 8
Chris@102 131 #endif
Chris@102 132 #endif
Chris@102 133
Chris@102 134 #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\
Chris@102 135 !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\
Chris@102 136 !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T)
Chris@102 137 #error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers.
Chris@102 138 #endif
Chris@102 139
Chris@102 140 #endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_