Index: gcc/libstdc++-v3/include/c_global/cstdatomic |
diff --git a/gcc/libstdc++-v3/include/c_global/cstdatomic b/gcc/libstdc++-v3/include/c_global/cstdatomic |
deleted file mode 100644 |
index 7489d97c07d5d3d2cbf2de8faaa3e2239d291a12..0000000000000000000000000000000000000000 |
--- a/gcc/libstdc++-v3/include/c_global/cstdatomic |
+++ /dev/null |
@@ -1,848 +0,0 @@ |
-// -*- C++ -*- header. |
- |
-// Copyright (C) 2008, 2009 |
-// Free Software Foundation, Inc. |
-// |
-// This file is part of the GNU ISO C++ Library. This library is free |
-// software; you can redistribute it and/or modify it under the |
-// terms of the GNU General Public License as published by the |
-// Free Software Foundation; either version 3, or (at your option) |
-// any later version. |
- |
-// This library is distributed in the hope that it will be useful, |
-// but WITHOUT ANY WARRANTY; without even the implied warranty of |
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
-// GNU General Public License for more details. |
- |
-// Under Section 7 of GPL version 3, you are granted additional |
-// permissions described in the GCC Runtime Library Exception, version |
-// 3.1, as published by the Free Software Foundation. |
- |
-// You should have received a copy of the GNU General Public License and |
-// a copy of the GCC Runtime Library Exception along with this program; |
-// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see |
-// <http://www.gnu.org/licenses/>. |
- |
-/** @file cstdatomic |
- * This is a Standard C++ Library file. You should @c #include this file |
- * in your programs, rather than any of the "*.h" implementation files. |
- * |
- * This is the C++ version of the Standard C Library header @c stdatomic.h, |
- * and its contents are (mostly) the same as that header, but are all |
- * contained in the namespace @c std (except for names which are defined |
- * as macros in C). |
- */ |
- |
-// Based on "C++ Atomic Types and Operations" by Hans Boehm and Lawrence Crowl. |
-// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html |
- |
-#ifndef _GLIBCXX_STDATOMIC |
-#define _GLIBCXX_STDATOMIC 1 |
- |
-#pragma GCC system_header |
- |
-#ifndef __GXX_EXPERIMENTAL_CXX0X__ |
-# include <c++0x_warning.h> |
-#endif |
- |
-#include <stdatomic.h> |
-#include <cstddef> |
- |
-_GLIBCXX_BEGIN_NAMESPACE(std) |
- |
- /** |
- * @addtogroup atomics |
- * @{ |
- */ |
- |
- /// kill_dependency |
- template<typename _Tp> |
- inline _Tp |
- kill_dependency(_Tp __y) |
- { |
- _Tp ret(__y); |
- return ret; |
- } |
- |
- inline memory_order |
- __calculate_memory_order(memory_order __m) |
- { |
- const bool __cond1 = __m == memory_order_release; |
- const bool __cond2 = __m == memory_order_acq_rel; |
- memory_order __mo1(__cond1 ? memory_order_relaxed : __m); |
- memory_order __mo2(__cond2 ? memory_order_acquire : __mo1); |
- return __mo2; |
- } |
- |
- // |
- // Three nested namespaces for atomic implementation details. |
- // |
- // The nested namespace inlined into std:: is determined by the value |
- // of the _GLIBCXX_ATOMIC_PROPERTY macro and the resulting |
- // ATOMIC_*_LOCK_FREE macros. See file stdatomic.h. |
- // |
- // 0 == __atomic0 == Never lock-free |
- // 1 == __atomic1 == Best available, sometimes lock-free |
- // 2 == __atomic2 == Always lock-free |
-#include <bits/atomic_0.h> |
-#include <bits/atomic_2.h> |
- |
- /// atomic |
- /// 29.4.3, Generic atomic type, primary class template. |
- template<typename _Tp> |
- struct atomic |
- { |
- private: |
- _Tp _M_i; |
- |
- public: |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(_Tp __i) : _M_i(__i) { } |
- |
- operator _Tp() const volatile; |
- |
- _Tp |
- operator=(_Tp __i) volatile { store(__i); return __i; } |
- |
- bool |
- is_lock_free() const volatile; |
- |
- void |
- store(_Tp, memory_order = memory_order_seq_cst) volatile; |
- |
- _Tp |
- load(memory_order = memory_order_seq_cst) const volatile; |
- |
- _Tp |
- exchange(_Tp __i, memory_order = memory_order_seq_cst) volatile; |
- |
- bool |
- compare_exchange_weak(_Tp&, _Tp, memory_order, memory_order) volatile; |
- |
- bool |
- compare_exchange_strong(_Tp&, _Tp, memory_order, memory_order) volatile; |
- |
- bool |
- compare_exchange_weak(_Tp&, _Tp, |
- memory_order = memory_order_seq_cst) volatile; |
- |
- bool |
- compare_exchange_strong(_Tp&, _Tp, |
- memory_order = memory_order_seq_cst) volatile; |
- }; |
- |
- |
- /// Partial specialization for pointer types. |
- template<typename _Tp> |
- struct atomic<_Tp*> : atomic_address |
- { |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(_Tp* __v) : atomic_address(__v) { } |
- |
- void |
- store(_Tp*, memory_order = memory_order_seq_cst) volatile; |
- |
- _Tp* |
- load(memory_order = memory_order_seq_cst) const volatile; |
- |
- _Tp* |
- exchange(_Tp*, memory_order = memory_order_seq_cst) volatile; |
- |
- bool |
- compare_exchange_weak(_Tp*&, _Tp*, memory_order, memory_order) volatile; |
- |
- bool |
- compare_exchange_strong(_Tp*&, _Tp*, memory_order, memory_order) volatile; |
- |
- bool |
- compare_exchange_weak(_Tp*&, _Tp*, |
- memory_order = memory_order_seq_cst) volatile; |
- |
- bool |
- compare_exchange_strong(_Tp*&, _Tp*, |
- memory_order = memory_order_seq_cst) volatile; |
- |
- _Tp* |
- fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) volatile; |
- |
- _Tp* |
- fetch_sub(ptrdiff_t, memory_order = memory_order_seq_cst) volatile; |
- |
- operator _Tp*() const volatile |
- { return load(); } |
- |
- _Tp* |
- operator=(_Tp* __v) volatile |
- { |
- store(__v); |
- return __v; |
- } |
- |
- _Tp* |
- operator++(int) volatile { return fetch_add(1); } |
- |
- _Tp* |
- operator--(int) volatile { return fetch_sub(1); } |
- |
- _Tp* |
- operator++() volatile { return fetch_add(1) + 1; } |
- |
- _Tp* |
- operator--() volatile { return fetch_sub(1) - 1; } |
- |
- _Tp* |
- operator+=(ptrdiff_t __d) volatile |
- { return fetch_add(__d) + __d; } |
- |
- _Tp* |
- operator-=(ptrdiff_t __d) volatile |
- { return fetch_sub(__d) - __d; } |
- }; |
- |
- |
- /// Explicit specialization for void* |
- template<> |
- struct atomic<void*> : public atomic_address |
- { |
- typedef void* __integral_type; |
- typedef atomic_address __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for bool. |
- template<> |
- struct atomic<bool> : public atomic_bool |
- { |
- typedef bool __integral_type; |
- typedef atomic_bool __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for char. |
- template<> |
- struct atomic<char> : public atomic_char |
- { |
- typedef char __integral_type; |
- typedef atomic_char __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for signed char. |
- template<> |
- struct atomic<signed char> : public atomic_schar |
- { |
- typedef signed char __integral_type; |
- typedef atomic_schar __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for unsigned char. |
- template<> |
- struct atomic<unsigned char> : public atomic_uchar |
- { |
- typedef unsigned char __integral_type; |
- typedef atomic_uchar __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for short. |
- template<> |
- struct atomic<short> : public atomic_short |
- { |
- typedef short __integral_type; |
- typedef atomic_short __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for unsigned short. |
- template<> |
- struct atomic<unsigned short> : public atomic_ushort |
- { |
- typedef unsigned short __integral_type; |
- typedef atomic_ushort __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for int. |
- template<> |
- struct atomic<int> : atomic_int |
- { |
- typedef int __integral_type; |
- typedef atomic_int __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for unsigned int. |
- template<> |
- struct atomic<unsigned int> : public atomic_uint |
- { |
- typedef unsigned int __integral_type; |
- typedef atomic_uint __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for long. |
- template<> |
- struct atomic<long> : public atomic_long |
- { |
- typedef long __integral_type; |
- typedef atomic_long __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for unsigned long. |
- template<> |
- struct atomic<unsigned long> : public atomic_ulong |
- { |
- typedef unsigned long __integral_type; |
- typedef atomic_ulong __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for long long. |
- template<> |
- struct atomic<long long> : public atomic_llong |
- { |
- typedef long long __integral_type; |
- typedef atomic_llong __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for unsigned long long. |
- template<> |
- struct atomic<unsigned long long> : public atomic_ullong |
- { |
- typedef unsigned long long __integral_type; |
- typedef atomic_ullong __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for wchar_t. |
- template<> |
- struct atomic<wchar_t> : public atomic_wchar_t |
- { |
- typedef wchar_t __integral_type; |
- typedef atomic_wchar_t __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for char16_t. |
- template<> |
- struct atomic<char16_t> : public atomic_char16_t |
- { |
- typedef char16_t __integral_type; |
- typedef atomic_char16_t __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- /// Explicit specialization for char32_t. |
- template<> |
- struct atomic<char32_t> : public atomic_char32_t |
- { |
- typedef char32_t __integral_type; |
- typedef atomic_char32_t __base_type; |
- |
- atomic() = default; |
- ~atomic() = default; |
- atomic(const atomic&) = delete; |
- atomic& operator=(const atomic&) = delete; |
- |
- atomic(__integral_type __i) : __base_type(__i) { } |
- |
- using __base_type::operator __integral_type; |
- using __base_type::operator=; |
- }; |
- |
- |
- template<typename _Tp> |
- _Tp* |
- atomic<_Tp*>::load(memory_order __m) const volatile |
- { return static_cast<_Tp*>(atomic_address::load(__m)); } |
- |
- template<typename _Tp> |
- _Tp* |
- atomic<_Tp*>::exchange(_Tp* __v, memory_order __m) volatile |
- { return static_cast<_Tp*>(atomic_address::exchange(__v, __m)); } |
- |
- template<typename _Tp> |
- bool |
- atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v, memory_order __m1, |
- memory_order __m2) volatile |
- { |
- void** __vr = reinterpret_cast<void**>(&__r); |
- void* __vv = static_cast<void*>(__v); |
- return atomic_address::compare_exchange_weak(*__vr, __vv, __m1, __m2); |
- } |
- |
- template<typename _Tp> |
- bool |
- atomic<_Tp*>::compare_exchange_strong(_Tp*& __r, _Tp* __v, |
- memory_order __m1, |
- memory_order __m2) volatile |
- { |
- void** __vr = reinterpret_cast<void**>(&__r); |
- void* __vv = static_cast<void*>(__v); |
- return atomic_address::compare_exchange_strong(*__vr, __vv, __m1, __m2); |
- } |
- |
- template<typename _Tp> |
- bool |
- atomic<_Tp*>::compare_exchange_weak(_Tp*& __r, _Tp* __v, |
- memory_order __m) volatile |
- { |
- return compare_exchange_weak(__r, __v, __m, |
- __calculate_memory_order(__m)); |
- } |
- |
- template<typename _Tp> |
- bool |
- atomic<_Tp*>::compare_exchange_strong(_Tp*& __r, _Tp* __v, |
- memory_order __m) volatile |
- { |
- return compare_exchange_strong(__r, __v, __m, |
- __calculate_memory_order(__m)); |
- } |
- |
- template<typename _Tp> |
- _Tp* |
- atomic<_Tp*>::fetch_add(ptrdiff_t __d, memory_order __m) volatile |
- { |
- void* __p = atomic_fetch_add_explicit(this, sizeof(_Tp) * __d, __m); |
- return static_cast<_Tp*>(__p); |
- } |
- |
- template<typename _Tp> |
- _Tp* |
- atomic<_Tp*>::fetch_sub(ptrdiff_t __d, memory_order __m) volatile |
- { |
- void* __p = atomic_fetch_sub_explicit(this, sizeof(_Tp) * __d, __m); |
- return static_cast<_Tp*>(__p); |
- } |
- |
- // Convenience function definitions, atomic_flag. |
- inline bool |
- atomic_flag_test_and_set_explicit(volatile atomic_flag* __a, memory_order __m) |
- { return __a->test_and_set(__m); } |
- |
- inline void |
- atomic_flag_clear_explicit(volatile atomic_flag* __a, memory_order __m) |
- { return __a->clear(__m); } |
- |
- |
- // Convenience function definitions, atomic_address. |
- inline bool |
- atomic_is_lock_free(const volatile atomic_address* __a) |
- { return __a->is_lock_free(); } |
- |
- inline void |
- atomic_store(volatile atomic_address* __a, void* __v) |
- { __a->store(__v); } |
- |
- inline void |
- atomic_store_explicit(volatile atomic_address* __a, void* __v, |
- memory_order __m) |
- { __a->store(__v, __m); } |
- |
- inline void* |
- atomic_load(const volatile atomic_address* __a) |
- { return __a->load(); } |
- |
- inline void* |
- atomic_load_explicit(const volatile atomic_address* __a, memory_order __m) |
- { return __a->load(__m); } |
- |
- inline void* |
- atomic_exchange(volatile atomic_address* __a, void* __v) |
- { return __a->exchange(__v); } |
- |
- inline void* |
- atomic_exchange_explicit(volatile atomic_address* __a, void* __v, |
- memory_order __m) |
- { return __a->exchange(__v, __m); } |
- |
- inline bool |
- atomic_compare_exchange_weak(volatile atomic_address* __a, |
- void** __v1, void* __v2) |
- { |
- return __a->compare_exchange_weak(*__v1, __v2, memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- inline bool |
- atomic_compare_exchange_strong(volatile atomic_address* __a, |
- void** __v1, void* __v2) |
- { |
- return __a->compare_exchange_strong(*__v1, __v2, memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- inline bool |
- atomic_compare_exchange_weak_explicit(volatile atomic_address* __a, |
- void** __v1, void* __v2, |
- memory_order __m1, memory_order __m2) |
- { return __a->compare_exchange_weak(*__v1, __v2, __m1, __m2); } |
- |
- inline bool |
- atomic_compare_exchange_strong_explicit(volatile atomic_address* __a, |
- void** __v1, void* __v2, |
- memory_order __m1, memory_order __m2) |
- { return __a->compare_exchange_strong(*__v1, __v2, __m1, __m2); } |
- |
- inline void* |
- atomic_fetch_add_explicit(volatile atomic_address* __a, ptrdiff_t __d, |
- memory_order __m) |
- { return __a->fetch_add(__d, __m); } |
- |
- inline void* |
- atomic_fetch_add(volatile atomic_address* __a, ptrdiff_t __d) |
- { return __a->fetch_add(__d); } |
- |
- inline void* |
- atomic_fetch_sub_explicit(volatile atomic_address* __a, ptrdiff_t __d, |
- memory_order __m) |
- { return __a->fetch_sub(__d, __m); } |
- |
- inline void* |
- atomic_fetch_sub(volatile atomic_address* __a, ptrdiff_t __d) |
- { return __a->fetch_sub(__d); } |
- |
- |
- // Convenience function definitions, atomic_bool. |
- inline bool |
- atomic_is_lock_free(const volatile atomic_bool* __a) |
- { return __a->is_lock_free(); } |
- |
- inline void |
- atomic_store(volatile atomic_bool* __a, bool __i) |
- { __a->store(__i); } |
- |
- inline void |
- atomic_store_explicit(volatile atomic_bool* __a, bool __i, memory_order __m) |
- { __a->store(__i, __m); } |
- |
- inline bool |
- atomic_load(const volatile atomic_bool* __a) |
- { return __a->load(); } |
- |
- inline bool |
- atomic_load_explicit(const volatile atomic_bool* __a, memory_order __m) |
- { return __a->load(__m); } |
- |
- inline bool |
- atomic_exchange(volatile atomic_bool* __a, bool __i) |
- { return __a->exchange(__i); } |
- |
- inline bool |
- atomic_exchange_explicit(volatile atomic_bool* __a, bool __i, |
- memory_order __m) |
- { return __a->exchange(__i, __m); } |
- |
- inline bool |
- atomic_compare_exchange_weak(volatile atomic_bool* __a, bool* __i1, bool __i2) |
- { |
- return __a->compare_exchange_weak(*__i1, __i2, memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- inline bool |
- atomic_compare_exchange_strong(volatile atomic_bool* __a, |
- bool* __i1, bool __i2) |
- { |
- return __a->compare_exchange_strong(*__i1, __i2, memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- inline bool |
- atomic_compare_exchange_weak_explicit(volatile atomic_bool* __a, bool* __i1, |
- bool __i2, memory_order __m1, |
- memory_order __m2) |
- { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } |
- |
- inline bool |
- atomic_compare_exchange_strong_explicit(volatile atomic_bool* __a, |
- bool* __i1, bool __i2, |
- memory_order __m1, memory_order __m2) |
- { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } |
- |
- |
- |
- // Free standing functions. Template argument should be constricted |
- // to intergral types as specified in the standard. |
- template<typename _ITp> |
- inline void |
- atomic_store_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { __a->store(__i, __m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_load_explicit(const volatile __atomic_base<_ITp>* __a, |
- memory_order __m) |
- { return __a->load(__m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_exchange_explicit(volatile __atomic_base<_ITp>* __a, |
- _ITp __i, memory_order __m) |
- { return __a->exchange(__i, __m); } |
- |
- template<typename _ITp> |
- inline bool |
- atomic_compare_exchange_weak_explicit(volatile __atomic_base<_ITp>* __a, |
- _ITp* __i1, _ITp __i2, |
- memory_order __m1, memory_order __m2) |
- { return __a->compare_exchange_weak(*__i1, __i2, __m1, __m2); } |
- |
- template<typename _ITp> |
- inline bool |
- atomic_compare_exchange_strong_explicit(volatile __atomic_base<_ITp>* __a, |
- _ITp* __i1, _ITp __i2, |
- memory_order __m1, |
- memory_order __m2) |
- { return __a->compare_exchange_strong(*__i1, __i2, __m1, __m2); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_add_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { return __a->fetch_add(__i, __m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_sub_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { return __a->fetch_sub(__i, __m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_and_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { return __a->fetch_and(__i, __m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_or_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { return __a->fetch_or(__i, __m); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_xor_explicit(volatile __atomic_base<_ITp>* __a, _ITp __i, |
- memory_order __m) |
- { return __a->fetch_xor(__i, __m); } |
- |
- template<typename _ITp> |
- inline bool |
- atomic_is_lock_free(const volatile __atomic_base<_ITp>* __a) |
- { return __a->is_lock_free(); } |
- |
- template<typename _ITp> |
- inline void |
- atomic_store(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { atomic_store_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_load(const volatile __atomic_base<_ITp>* __a) |
- { return atomic_load_explicit(__a, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_exchange(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_exchange_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline bool |
- atomic_compare_exchange_weak(volatile __atomic_base<_ITp>* __a, |
- _ITp* __i1, _ITp __i2) |
- { |
- return atomic_compare_exchange_weak_explicit(__a, __i1, __i2, |
- memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- template<typename _ITp> |
- inline bool |
- atomic_compare_exchange_strong(volatile __atomic_base<_ITp>* __a, |
- _ITp* __i1, _ITp __i2) |
- { |
- return atomic_compare_exchange_strong_explicit(__a, __i1, __i2, |
- memory_order_seq_cst, |
- memory_order_seq_cst); |
- } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_fetch_add_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_fetch_sub_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_fetch_and_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_fetch_or_explicit(__a, __i, memory_order_seq_cst); } |
- |
- template<typename _ITp> |
- inline _ITp |
- atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i) |
- { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); } |
- |
- // @} group atomics |
- |
-_GLIBCXX_END_NAMESPACE |
- |
-#endif |
- |
- |