Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef _GLIBCXX_ATOMIC_BASE_H
00031 #define _GLIBCXX_ATOMIC_BASE_H 1
00032
00033 #pragma GCC system_header
00034
00035 #include <bits/c++config.h>
00036 #include <stdbool.h>
00037 #include <stdint.h>
00038
00039 namespace std _GLIBCXX_VISIBILITY(default)
00040 {
00041 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 typedef enum memory_order
00052 {
00053 memory_order_relaxed,
00054 memory_order_consume,
00055 memory_order_acquire,
00056 memory_order_release,
00057 memory_order_acq_rel,
00058 memory_order_seq_cst
00059 } memory_order;
00060
00061 inline memory_order
00062 __calculate_memory_order(memory_order __m)
00063 {
00064 const bool __cond1 = __m == memory_order_release;
00065 const bool __cond2 = __m == memory_order_acq_rel;
00066 memory_order __mo1(__cond1 ? memory_order_relaxed : __m);
00067 memory_order __mo2(__cond2 ? memory_order_acquire : __mo1);
00068 return __mo2;
00069 }
00070
00071 void
00072 atomic_thread_fence(memory_order);
00073
00074 void
00075 atomic_signal_fence(memory_order);
00076
00077
00078 template<typename _Tp>
00079 inline _Tp
00080 kill_dependency(_Tp __y)
00081 {
00082 _Tp __ret(__y);
00083 return __ret;
00084 }
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 _GLIBCXX_BEGIN_EXTERN_C
00097
00098 struct __atomic_flag_base
00099 {
00100 bool _M_i;
00101 };
00102
00103 _GLIBCXX_END_EXTERN_C
00104
00105 #define ATOMIC_FLAG_INIT { false }
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 namespace __atomic0
00121 {
00122 struct atomic_flag;
00123
00124 template<typename _IntTp>
00125 struct __atomic_base;
00126 }
00127
00128 namespace __atomic2
00129 {
00130 struct atomic_flag;
00131
00132 template<typename _IntTp>
00133 struct __atomic_base;
00134 }
00135
00136 namespace __atomic1
00137 {
00138 using __atomic2::atomic_flag;
00139 using __atomic0::__atomic_base;
00140 }
00141
00142
00143 #if defined(_GLIBCXX_ATOMIC_BUILTINS_1) && defined(_GLIBCXX_ATOMIC_BUILTINS_2) \
00144 && defined(_GLIBCXX_ATOMIC_BUILTINS_4) && defined(_GLIBCXX_ATOMIC_BUILTINS_8)
00145 # define _GLIBCXX_ATOMIC_PROPERTY 2
00146 # define _GLIBCXX_ATOMIC_NAMESPACE __atomic2
00147 #elif defined(_GLIBCXX_ATOMIC_BUILTINS_1)
00148 # define _GLIBCXX_ATOMIC_PROPERTY 1
00149 # define _GLIBCXX_ATOMIC_NAMESPACE __atomic1
00150 #else
00151 # define _GLIBCXX_ATOMIC_PROPERTY 0
00152 # define _GLIBCXX_ATOMIC_NAMESPACE __atomic0
00153 #endif
00154
00155 #define ATOMIC_CHAR_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00156 #define ATOMIC_CHAR16_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00157 #define ATOMIC_CHAR32_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00158 #define ATOMIC_WCHAR_T_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00159 #define ATOMIC_SHORT_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00160 #define ATOMIC_INT_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00161 #define ATOMIC_LONG_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00162 #define ATOMIC_LLONG_LOCK_FREE _GLIBCXX_ATOMIC_PROPERTY
00163
00164 inline namespace _GLIBCXX_ATOMIC_NAMESPACE { }
00165
00166
00167
00168 typedef __atomic_base<char> atomic_char;
00169
00170
00171 typedef __atomic_base<signed char> atomic_schar;
00172
00173
00174 typedef __atomic_base<unsigned char> atomic_uchar;
00175
00176
00177 typedef __atomic_base<short> atomic_short;
00178
00179
00180 typedef __atomic_base<unsigned short> atomic_ushort;
00181
00182
00183 typedef __atomic_base<int> atomic_int;
00184
00185
00186 typedef __atomic_base<unsigned int> atomic_uint;
00187
00188
00189 typedef __atomic_base<long> atomic_long;
00190
00191
00192 typedef __atomic_base<unsigned long> atomic_ulong;
00193
00194
00195 typedef __atomic_base<long long> atomic_llong;
00196
00197
00198 typedef __atomic_base<unsigned long long> atomic_ullong;
00199
00200
00201 typedef __atomic_base<wchar_t> atomic_wchar_t;
00202
00203
00204 typedef __atomic_base<char16_t> atomic_char16_t;
00205
00206
00207 typedef __atomic_base<char32_t> atomic_char32_t;
00208
00209
00210 typedef __atomic_base<char32_t> atomic_char32_t;
00211
00212
00213
00214 typedef __atomic_base<int_least8_t> atomic_int_least8_t;
00215
00216
00217 typedef __atomic_base<uint_least8_t> atomic_uint_least8_t;
00218
00219
00220 typedef __atomic_base<int_least16_t> atomic_int_least16_t;
00221
00222
00223 typedef __atomic_base<uint_least16_t> atomic_uint_least16_t;
00224
00225
00226 typedef __atomic_base<int_least32_t> atomic_int_least32_t;
00227
00228
00229 typedef __atomic_base<uint_least32_t> atomic_uint_least32_t;
00230
00231
00232 typedef __atomic_base<int_least64_t> atomic_int_least64_t;
00233
00234
00235 typedef __atomic_base<uint_least64_t> atomic_uint_least64_t;
00236
00237
00238
00239 typedef __atomic_base<int_fast8_t> atomic_int_fast8_t;
00240
00241
00242 typedef __atomic_base<uint_fast8_t> atomic_uint_fast8_t;
00243
00244
00245 typedef __atomic_base<int_fast16_t> atomic_int_fast16_t;
00246
00247
00248 typedef __atomic_base<uint_fast16_t> atomic_uint_fast16_t;
00249
00250
00251 typedef __atomic_base<int_fast32_t> atomic_int_fast32_t;
00252
00253
00254 typedef __atomic_base<uint_fast32_t> atomic_uint_fast32_t;
00255
00256
00257 typedef __atomic_base<int_fast64_t> atomic_int_fast64_t;
00258
00259
00260 typedef __atomic_base<uint_fast64_t> atomic_uint_fast64_t;
00261
00262
00263
00264 typedef __atomic_base<intptr_t> atomic_intptr_t;
00265
00266
00267 typedef __atomic_base<uintptr_t> atomic_uintptr_t;
00268
00269
00270 typedef __atomic_base<size_t> atomic_size_t;
00271
00272
00273 typedef __atomic_base<intmax_t> atomic_intmax_t;
00274
00275
00276 typedef __atomic_base<uintmax_t> atomic_uintmax_t;
00277
00278
00279 typedef __atomic_base<ptrdiff_t> atomic_ptrdiff_t;
00280
00281
00282 #define ATOMIC_VAR_INIT(_VI) { _VI }
00283
00284 template<typename _Tp>
00285 struct atomic;
00286
00287 template<typename _Tp>
00288 struct atomic<_Tp*>;
00289
00290
00291
00292 _GLIBCXX_END_NAMESPACE_VERSION
00293 }
00294
00295 #endif