aboutsummaryrefslogtreecommitdiff
path: root/include/EASTL/internal/atomic/atomic_size_aligned.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/EASTL/internal/atomic/atomic_size_aligned.h')
-rw-r--r--include/EASTL/internal/atomic/atomic_size_aligned.h197
1 files changed, 0 insertions, 197 deletions
diff --git a/include/EASTL/internal/atomic/atomic_size_aligned.h b/include/EASTL/internal/atomic/atomic_size_aligned.h
deleted file mode 100644
index f503375..0000000
--- a/include/EASTL/internal/atomic/atomic_size_aligned.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////////
-// Copyright (c) Electronic Arts Inc. All rights reserved.
-/////////////////////////////////////////////////////////////////////////////////
-
-
-#ifndef EASTL_ATOMIC_INTERNAL_SIZE_ALIGNED_H
-#define EASTL_ATOMIC_INTERNAL_SIZE_ALIGNED_H
-
-#if defined(EA_PRAGMA_ONCE_SUPPORTED)
- #pragma once
-#endif
-
-
-#include "atomic_push_compiler_options.h"
-
-
-namespace eastl
-{
-
-
-namespace internal
-{
-
-
-#define EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_IMPL(funcName) \
- template <typename OrderSuccess, typename OrderFailure> \
- bool funcName(T& /*expected*/, T /*desired*/, \
- OrderSuccess /*orderSuccess*/, \
- OrderFailure /*orderFailure*/) EA_NOEXCEPT \
- { \
- EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(T); \
- return false; \
- } \
- \
- template <typename OrderSuccess, typename OrderFailure> \
- bool funcName(T& /*expected*/, T /*desired*/, \
- OrderSuccess /*orderSuccess*/, \
- OrderFailure /*orderFailure*/) volatile EA_NOEXCEPT \
- { \
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T); \
- return false; \
- } \
- \
- template <typename Order> \
- bool funcName(T& /*expected*/, T /*desired*/, \
- Order /*order*/) EA_NOEXCEPT \
- { \
- EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(T); \
- return false; \
- } \
- \
- template <typename Order> \
- bool funcName(T& /*expected*/, T /*desired*/, \
- Order /*order*/) volatile EA_NOEXCEPT \
- { \
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T); \
- return false; \
- } \
- \
- bool funcName(T& /*expected*/, T /*desired*/) volatile EA_NOEXCEPT \
- { \
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T); \
- return false; \
- }
-
-#define EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_WEAK_IMPL() \
- EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_IMPL(compare_exchange_weak)
-
-#define EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_STRONG_IMPL() \
- EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_IMPL(compare_exchange_strong)
-
-
- template<typename T>
- struct atomic_size_aligned
- {
- public: /* ctors */
-
- EA_CONSTEXPR atomic_size_aligned(T desired) EA_NOEXCEPT
- : mAtomic{ desired }
- {
- }
-
- EA_CONSTEXPR atomic_size_aligned() EA_NOEXCEPT_IF(eastl::is_nothrow_default_constructible_v<T>)
- : mAtomic{} /* Value-Initialize which will Zero-Initialize Trivial Constructible types */
- {
- }
-
- atomic_size_aligned(const atomic_size_aligned&) EA_NOEXCEPT = delete;
-
- public: /* store */
-
- template <typename Order>
- void store(T /*desired*/, Order /*order*/) EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(T);
- }
-
- template <typename Order>
- void store(T /*desired*/, Order /*order*/) volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- void store(T /*desired*/) volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- public: /* load */
-
- template <typename Order>
- T load(Order /*order*/) const EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(T);
- }
-
- template <typename Order>
- T load(Order /*order*/) const volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- T load() const volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- public: /* exchange */
-
- template <typename Order>
- T exchange(T /*desired*/, Order /*order*/) EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_INVALID_MEMORY_ORDER(T);
- }
-
- template <typename Order>
- T exchange(T /*desired*/, Order /*order*/) volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- T exchange(T /*desired*/) volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- public: /* compare_exchange_weak */
-
- EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_WEAK_IMPL()
-
- public: /* compare_exchange_strong */
-
- EASTL_ATOMIC_SIZE_ALIGNED_STATIC_ASSERT_CMPXCHG_STRONG_IMPL()
-
- public: /* assignment operator */
-
- T operator=(T /*desired*/) volatile EA_NOEXCEPT
- {
- EASTL_ATOMIC_STATIC_ASSERT_VOLATILE_MEM_FN(T);
- }
-
- atomic_size_aligned& operator=(const atomic_size_aligned&) EA_NOEXCEPT = delete;
- atomic_size_aligned& operator=(const atomic_size_aligned&) volatile EA_NOEXCEPT = delete;
-
- protected: /* Accessors */
-
- T* GetAtomicAddress() const EA_NOEXCEPT
- {
- return eastl::addressof(mAtomic);
- }
-
- private:
-
- /**
- * Some compilers such as MSVC will align 64-bit values on 32-bit machines on
- * 4-byte boundaries which can ruin the atomicity guarantees.
- *
- * Ensure everything is size aligned.
- *
- * mutable is needed in cases such as when loads are only guaranteed to be atomic
- * using a compare exchange, such as for 128-bit atomics, so we need to be able
- * to have write access to the variable as one example.
- */
- EA_ALIGN(sizeof(T)) mutable T mAtomic;
- };
-
-
-} // namespace internal
-
-
-} // namespace eastl
-
-
-#include "atomic_pop_compiler_options.h"
-
-
-#endif /* EASTL_ATOMIC_INTERNAL_SIZE_ALIGNED_H */