Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-15 09:44:22

0001 /*
0002  * Distributed under the Boost Software License, Version 1.0.
0003  * (See accompanying file LICENSE_1_0.txt or copy at
0004  * http://www.boost.org/LICENSE_1_0.txt)
0005  *
0006  * Copyright (c) 2014 Andrey Semashev
0007  */
0008 /*!
0009  * \file   atomic/detail/capabilities.hpp
0010  *
0011  * This header defines core feature capabilities macros.
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 // We store bools in 1-byte storage in all backends
0155 #define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
0156 #endif
0157 
0158 #ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
0159 // atomic_flag uses 4-byte storage
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 // !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
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 // BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_