8#include <QtCore/qatomic_cxx11.h>
11QT_WARNING_DISABLE_MSVC(4522)
18#pragma qt_no_master_include
19#pragma qt_sync_stop_processing
23class QBasicAtomicInteger
27 typedef QAtomicOps<T> Ops;
29 static_assert(std::is_integral_v<T>,
"template parameter is not an integral type");
30 static_assert(QAtomicOpsSupport<
sizeof(T)>::IsSupported,
"template parameter is an integral of a size not supported on this platform");
32 typename Ops::Type _q_value;
36 T loadRelaxed()
const noexcept {
return Ops::loadRelaxed(_q_value); }
37 void storeRelaxed(T newValue)
noexcept { Ops::storeRelaxed(_q_value, newValue); }
39 T loadAcquire()
const noexcept {
return Ops::loadAcquire(_q_value); }
40 void storeRelease(T newValue)
noexcept { Ops::storeRelease(_q_value, newValue); }
41 operator T()
const noexcept {
return loadAcquire(); }
42 T operator=(T newValue)
noexcept { storeRelease(newValue);
return newValue; }
44 static constexpr bool isReferenceCountingNative()
noexcept {
return Ops::isReferenceCountingNative(); }
45 static constexpr bool isReferenceCountingWaitFree()
noexcept {
return Ops::isReferenceCountingWaitFree(); }
47 bool ref()
noexcept {
return Ops::ref(_q_value); }
48 bool deref()
noexcept {
return Ops::deref(_q_value); }
50 static constexpr bool isTestAndSetNative()
noexcept {
return Ops::isTestAndSetNative(); }
51 static constexpr bool isTestAndSetWaitFree()
noexcept {
return Ops::isTestAndSetWaitFree(); }
53 bool testAndSetRelaxed(T expectedValue, T newValue)
noexcept
54 {
return Ops::testAndSetRelaxed(_q_value, expectedValue, newValue); }
55 bool testAndSetAcquire(T expectedValue, T newValue)
noexcept
56 {
return Ops::testAndSetAcquire(_q_value, expectedValue, newValue); }
57 bool testAndSetRelease(T expectedValue, T newValue)
noexcept
58 {
return Ops::testAndSetRelease(_q_value, expectedValue, newValue); }
59 bool testAndSetOrdered(T expectedValue, T newValue)
noexcept
60 {
return Ops::testAndSetOrdered(_q_value, expectedValue, newValue); }
62 bool testAndSetRelaxed(T expectedValue, T newValue, T ¤tValue)
noexcept
63 {
return Ops::testAndSetRelaxed(_q_value, expectedValue, newValue, ¤tValue); }
64 bool testAndSetAcquire(T expectedValue, T newValue, T ¤tValue)
noexcept
65 {
return Ops::testAndSetAcquire(_q_value, expectedValue, newValue, ¤tValue); }
66 bool testAndSetRelease(T expectedValue, T newValue, T ¤tValue)
noexcept
67 {
return Ops::testAndSetRelease(_q_value, expectedValue, newValue, ¤tValue); }
68 bool testAndSetOrdered(T expectedValue, T newValue, T ¤tValue)
noexcept
69 {
return Ops::testAndSetOrdered(_q_value, expectedValue, newValue, ¤tValue); }
71 static constexpr bool isFetchAndStoreNative()
noexcept {
return Ops::isFetchAndStoreNative(); }
72 static constexpr bool isFetchAndStoreWaitFree()
noexcept {
return Ops::isFetchAndStoreWaitFree(); }
74 T fetchAndStoreRelaxed(T newValue)
noexcept
75 {
return Ops::fetchAndStoreRelaxed(_q_value, newValue); }
76 T fetchAndStoreAcquire(T newValue)
noexcept
77 {
return Ops::fetchAndStoreAcquire(_q_value, newValue); }
78 T fetchAndStoreRelease(T newValue)
noexcept
79 {
return Ops::fetchAndStoreRelease(_q_value, newValue); }
80 T fetchAndStoreOrdered(T newValue)
noexcept
81 {
return Ops::fetchAndStoreOrdered(_q_value, newValue); }
83 static constexpr bool isFetchAndAddNative()
noexcept {
return Ops::isFetchAndAddNative(); }
84 static constexpr bool isFetchAndAddWaitFree()
noexcept {
return Ops::isFetchAndAddWaitFree(); }
86 T fetchAndAddRelaxed(T valueToAdd)
noexcept
87 {
return Ops::fetchAndAddRelaxed(_q_value, valueToAdd); }
88 T fetchAndAddAcquire(T valueToAdd)
noexcept
89 {
return Ops::fetchAndAddAcquire(_q_value, valueToAdd); }
90 T fetchAndAddRelease(T valueToAdd)
noexcept
91 {
return Ops::fetchAndAddRelease(_q_value, valueToAdd); }
92 T fetchAndAddOrdered(T valueToAdd)
noexcept
93 {
return Ops::fetchAndAddOrdered(_q_value, valueToAdd); }
95 T fetchAndSubRelaxed(T valueToAdd)
noexcept
96 {
return Ops::fetchAndSubRelaxed(_q_value, valueToAdd); }
97 T fetchAndSubAcquire(T valueToAdd)
noexcept
98 {
return Ops::fetchAndSubAcquire(_q_value, valueToAdd); }
99 T fetchAndSubRelease(T valueToAdd)
noexcept
100 {
return Ops::fetchAndSubRelease(_q_value, valueToAdd); }
101 T fetchAndSubOrdered(T valueToAdd)
noexcept
102 {
return Ops::fetchAndSubOrdered(_q_value, valueToAdd); }
104 T fetchAndAndRelaxed(T valueToAdd)
noexcept
105 {
return Ops::fetchAndAndRelaxed(_q_value, valueToAdd); }
106 T fetchAndAndAcquire(T valueToAdd)
noexcept
107 {
return Ops::fetchAndAndAcquire(_q_value, valueToAdd); }
108 T fetchAndAndRelease(T valueToAdd)
noexcept
109 {
return Ops::fetchAndAndRelease(_q_value, valueToAdd); }
110 T fetchAndAndOrdered(T valueToAdd)
noexcept
111 {
return Ops::fetchAndAndOrdered(_q_value, valueToAdd); }
113 T fetchAndOrRelaxed(T valueToAdd)
noexcept
114 {
return Ops::fetchAndOrRelaxed(_q_value, valueToAdd); }
115 T fetchAndOrAcquire(T valueToAdd)
noexcept
116 {
return Ops::fetchAndOrAcquire(_q_value, valueToAdd); }
117 T fetchAndOrRelease(T valueToAdd)
noexcept
118 {
return Ops::fetchAndOrRelease(_q_value, valueToAdd); }
119 T fetchAndOrOrdered(T valueToAdd)
noexcept
120 {
return Ops::fetchAndOrOrdered(_q_value, valueToAdd); }
122 T fetchAndXorRelaxed(T valueToAdd)
noexcept
123 {
return Ops::fetchAndXorRelaxed(_q_value, valueToAdd); }
124 T fetchAndXorAcquire(T valueToAdd)
noexcept
125 {
return Ops::fetchAndXorAcquire(_q_value, valueToAdd); }
126 T fetchAndXorRelease(T valueToAdd)
noexcept
127 {
return Ops::fetchAndXorRelease(_q_value, valueToAdd); }
128 T fetchAndXorOrdered(T valueToAdd)
noexcept
129 {
return Ops::fetchAndXorOrdered(_q_value, valueToAdd); }
131 T operator++()
noexcept
132 {
return fetchAndAddOrdered(1) + 1; }
133 T operator++(
int)
noexcept
134 {
return fetchAndAddOrdered(1); }
135 T operator--()
noexcept
136 {
return fetchAndSubOrdered(1) - 1; }
137 T operator--(
int)
noexcept
138 {
return fetchAndSubOrdered(1); }
140 T operator+=(T v)
noexcept
141 {
return fetchAndAddOrdered(v) + v; }
142 T operator-=(T v)
noexcept
143 {
return fetchAndSubOrdered(v) - v; }
144 T operator&=(T v)
noexcept
145 {
return fetchAndAndOrdered(v) & v; }
146 T operator|=(T v)
noexcept
147 {
return fetchAndOrOrdered(v) | v; }
148 T operator^=(T v)
noexcept
149 {
return fetchAndXorOrdered(v) ^ v; }
152 QBasicAtomicInteger() =
default;
153 constexpr QBasicAtomicInteger(T value)
noexcept : _q_value(value) {}
154 QBasicAtomicInteger(
const QBasicAtomicInteger &) =
delete;
155 QBasicAtomicInteger &operator=(
const QBasicAtomicInteger &) =
delete;
156 QBasicAtomicInteger &operator=(
const QBasicAtomicInteger &)
volatile =
delete;
184 {
return Ops::testAndSetRelaxed(_q_value, expectedValue, newValue); }
186 {
return Ops::testAndSetAcquire(_q_value, expectedValue, newValue); }
188 {
return Ops::testAndSetRelease(_q_value, expectedValue, newValue); }
190 {
return Ops::testAndSetOrdered(_q_value, expectedValue, newValue); }
193 {
return Ops::testAndSetRelaxed(_q_value, expectedValue, newValue, ¤tValue); }
195 {
return Ops::testAndSetAcquire(_q_value, expectedValue, newValue, ¤tValue); }
197 {
return Ops::testAndSetRelease(_q_value, expectedValue, newValue, ¤tValue); }
199 {
return Ops::testAndSetOrdered(_q_value, expectedValue, newValue, ¤tValue); }
205 {
return Ops::fetchAndStoreRelaxed(_q_value, newValue); }
207 {
return Ops::fetchAndStoreAcquire(_q_value, newValue); }
209 {
return Ops::fetchAndStoreRelease(_q_value, newValue); }
211 {
return Ops::fetchAndStoreOrdered(_q_value, newValue); }
217 {
return Ops::fetchAndAddRelaxed(_q_value, valueToAdd); }
219 {
return Ops::fetchAndAddAcquire(_q_value, valueToAdd); }
221 {
return Ops::fetchAndAddRelease(_q_value, valueToAdd); }
223 {
return Ops::fetchAndAddOrdered(_q_value, valueToAdd); }
226 {
return Ops::fetchAndSubRelaxed(_q_value, valueToAdd); }
228 {
return Ops::fetchAndSubAcquire(_q_value, valueToAdd); }
230 {
return Ops::fetchAndSubRelease(_q_value, valueToAdd); }
232 {
return Ops::fetchAndSubOrdered(_q_value, valueToAdd); }
235 {
return fetchAndAddOrdered(1) + 1; }
237 {
return fetchAndAddOrdered(1); }
239 {
return fetchAndSubOrdered(1) - 1; }
241 {
return fetchAndSubOrdered(1); }
243 {
return fetchAndAddOrdered(valueToAdd) + valueToAdd; }
245 {
return fetchAndSubOrdered(valueToSub) - valueToSub; }
254#ifndef Q_BASIC_ATOMIC_INITIALIZER
255# define Q_BASIC_ATOMIC_INITIALIZER(a) { (a) }
bool testAndSetOrdered(Type expectedValue, Type newValue, Type ¤tValue) noexcept
QBasicAtomicPointer & operator=(const QBasicAtomicPointer &)=delete
Type fetchAndAddOrdered(qptrdiff valueToAdd) noexcept
bool testAndSetRelaxed(Type expectedValue, Type newValue) noexcept
Type fetchAndStoreAcquire(Type newValue) noexcept
Type fetchAndStoreRelease(Type newValue) noexcept
Type operator-=(qptrdiff valueToSub) noexcept
static constexpr bool isFetchAndAddNative() noexcept
bool testAndSetRelease(Type expectedValue, Type newValue) noexcept
Type fetchAndStoreOrdered(Type newValue) noexcept
QBasicAtomicPointer()=default
Type operator=(Type newValue) noexcept
constexpr QBasicAtomicPointer(Type value) noexcept
bool testAndSetAcquire(Type expectedValue, Type newValue) noexcept
bool testAndSetRelease(Type expectedValue, Type newValue, Type ¤tValue) noexcept
Type operator++(int) noexcept
QBasicAtomicPointer(const QBasicAtomicPointer &)=delete
Type loadAcquire() const noexcept
Type operator--(int) noexcept
bool testAndSetAcquire(Type expectedValue, Type newValue, Type ¤tValue) noexcept
Type fetchAndSubRelaxed(qptrdiff valueToAdd) noexcept
static constexpr bool isFetchAndAddWaitFree() noexcept
bool testAndSetOrdered(Type expectedValue, Type newValue) noexcept
static constexpr bool isTestAndSetNative() noexcept
Type operator+=(qptrdiff valueToAdd) noexcept
Type fetchAndSubOrdered(qptrdiff valueToAdd) noexcept
Type loadRelaxed() const noexcept
Type operator++() noexcept
static constexpr bool isFetchAndStoreWaitFree() noexcept
Type fetchAndSubRelease(qptrdiff valueToAdd) noexcept
QBasicAtomicPointer & operator=(const QBasicAtomicPointer &) volatile =delete
void storeRelaxed(Type newValue) noexcept
bool testAndSetRelaxed(Type expectedValue, Type newValue, Type ¤tValue) noexcept
Type fetchAndAddRelaxed(qptrdiff valueToAdd) noexcept
void storeRelease(Type newValue) noexcept
operator Type() const noexcept
Type fetchAndSubAcquire(qptrdiff valueToAdd) noexcept
Type fetchAndAddRelease(qptrdiff valueToAdd) noexcept
static constexpr bool isTestAndSetWaitFree() noexcept
Type fetchAndAddAcquire(qptrdiff valueToAdd) noexcept
Type operator--() noexcept
Type fetchAndStoreRelaxed(Type newValue) noexcept
static constexpr bool isFetchAndStoreNative() noexcept
QDeferredDeleteEvent(int loopLevel, int scopeLevel)
Constructs a deferred delete event with the given loop and scope level.
QBasicAtomicInteger< int > QBasicAtomicInt
static int registerEventTypeZeroBased(int id) noexcept
QBasicAtomicBitField< QEvent::MaxUser - QEvent::User+1 > UserEventTypeRegistry
QT_BEGIN_NAMESPACE Q_TRACE_POINT(qtcore, QEvent_ctor, QEvent *event, QEvent::Type type)
#define Q_IMPL_EVENT_COMMON(Class)