File indexing completed on 2025-12-15 09:44:22
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #ifndef BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_
0015 #define BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_
0016
0017 #include <boost/atomic/detail/config.hpp>
0018 #include <boost/atomic/detail/platform.hpp>
0019 #include <boost/atomic/detail/int_sizes.hpp>
0020 #if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
0021 #include <boost/atomic/detail/float_sizes.hpp>
0022 #endif
0023
0024 #if defined(BOOST_ATOMIC_DETAIL_CORE_BACKEND_HEADER)
0025 #include BOOST_ATOMIC_DETAIL_CORE_BACKEND_HEADER(boost/atomic/detail/caps_)
0026 #elif defined(BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER)
0027 #include BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER(boost/atomic/detail/caps_arch_)
0028 #endif
0029
0030 #ifdef BOOST_HAS_PRAGMA_ONCE
0031 #pragma once
0032 #endif
0033
0034 #ifndef BOOST_ATOMIC_INT8_LOCK_FREE
0035 #define BOOST_ATOMIC_INT8_LOCK_FREE 0
0036 #endif
0037
0038 #ifndef BOOST_ATOMIC_INT16_LOCK_FREE
0039 #define BOOST_ATOMIC_INT16_LOCK_FREE 0
0040 #endif
0041
0042 #ifndef BOOST_ATOMIC_INT32_LOCK_FREE
0043 #define BOOST_ATOMIC_INT32_LOCK_FREE 0
0044 #endif
0045
0046 #ifndef BOOST_ATOMIC_INT64_LOCK_FREE
0047 #define BOOST_ATOMIC_INT64_LOCK_FREE 0
0048 #endif
0049
0050 #ifndef BOOST_ATOMIC_INT128_LOCK_FREE
0051 #define BOOST_ATOMIC_INT128_LOCK_FREE 0
0052 #endif
0053
0054
0055 #ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
0056 #define BOOST_ATOMIC_CHAR_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0057 #endif
0058
0059 #ifndef BOOST_ATOMIC_CHAR8_T_LOCK_FREE
0060 #define BOOST_ATOMIC_CHAR8_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0061 #endif
0062
0063 #ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
0064 #define BOOST_ATOMIC_CHAR16_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0065 #endif
0066
0067 #ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
0068 #define BOOST_ATOMIC_CHAR32_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0069 #endif
0070
0071 #ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
0072 #if BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 1
0073 #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0074 #elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 2
0075 #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0076 #elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 4
0077 #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0078 #elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 8
0079 #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0080 #else
0081 #define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
0082 #endif
0083 #endif
0084
0085 #ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
0086 #if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 1
0087 #define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0088 #elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
0089 #define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0090 #elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
0091 #define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0092 #elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
0093 #define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0094 #else
0095 #define BOOST_ATOMIC_SHORT_LOCK_FREE 0
0096 #endif
0097 #endif
0098
0099 #ifndef BOOST_ATOMIC_INT_LOCK_FREE
0100 #if BOOST_ATOMIC_DETAIL_SIZEOF_INT == 1
0101 #define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0102 #elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
0103 #define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0104 #elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
0105 #define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0106 #elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
0107 #define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0108 #else
0109 #define BOOST_ATOMIC_INT_LOCK_FREE 0
0110 #endif
0111 #endif
0112
0113 #ifndef BOOST_ATOMIC_LONG_LOCK_FREE
0114 #if BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 1
0115 #define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0116 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
0117 #define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0118 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
0119 #define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0120 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
0121 #define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0122 #else
0123 #define BOOST_ATOMIC_LONG_LOCK_FREE 0
0124 #endif
0125 #endif
0126
0127 #ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
0128 #if BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 1
0129 #define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0130 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
0131 #define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0132 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
0133 #define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0134 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
0135 #define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0136 #else
0137 #define BOOST_ATOMIC_LLONG_LOCK_FREE 0
0138 #endif
0139 #endif
0140
0141 #ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
0142 #if (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 8
0143 #define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0144 #elif (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 4
0145 #define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0146 #else
0147 #define BOOST_ATOMIC_POINTER_LOCK_FREE 0
0148 #endif
0149 #endif
0150
0151 #define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
0152
0153 #ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
0154
0155 #define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0156 #endif
0157
0158 #ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
0159
0160 #define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0161 #endif
0162
0163 #if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
0164
0165 #if !defined(BOOST_ATOMIC_FLOAT_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT)
0166 #if BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 2
0167 #define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0168 #elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 4
0169 #define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0170 #elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 8
0171 #define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0172 #elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT <= 16
0173 #define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
0174 #else
0175 #define BOOST_ATOMIC_FLOAT_LOCK_FREE 0
0176 #endif
0177 #endif
0178
0179 #if !defined(BOOST_ATOMIC_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE)
0180 #if BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 2
0181 #define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0182 #elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 4
0183 #define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0184 #elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 8
0185 #define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0186 #elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE <= 16
0187 #define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
0188 #else
0189 #define BOOST_ATOMIC_DOUBLE_LOCK_FREE 0
0190 #endif
0191 #endif
0192
0193 #if !defined(BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE)
0194 #if BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 2
0195 #define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
0196 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 4
0197 #define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
0198 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 8
0199 #define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
0200 #elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE <= 16
0201 #define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
0202 #else
0203 #define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE 0
0204 #endif
0205 #endif
0206
0207 #endif
0208
0209 #ifndef BOOST_ATOMIC_THREAD_FENCE
0210 #define BOOST_ATOMIC_THREAD_FENCE 0
0211 #endif
0212
0213 #ifndef BOOST_ATOMIC_SIGNAL_FENCE
0214 #define BOOST_ATOMIC_SIGNAL_FENCE 0
0215 #endif
0216
0217 #endif