From 19c70982517e76d89bb3da931e1390a6386603da Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 27 Feb 2013 17:25:45 -0800 Subject: Add the rest of the non-volatile members of std::atomic to QBasicAtomic [ChangeLog][QtCore][Atomic support]Added more operations to the atomic classes, including operator T(), operator=(T), operator++, operator--. For the QAtomicInteger, bit-manipulation operations are also provided, both in operator and in fetchAndXxxYyyyyy modes. Change-Id: I39c07be74e15e0a48f9e931f4342b182004dee1a Reviewed-by: David Faure --- src/corelib/thread/qatomic.h | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/corelib/thread/qatomic.h') diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h index d79e168cb3..1faaa22d0f 100644 --- a/src/corelib/thread/qatomic.h +++ b/src/corelib/thread/qatomic.h @@ -89,6 +89,9 @@ public: void store(int newValue); void storeRelease(int newValue); + operator int() const; + QAtomicInteger &operator=(int); + static Q_DECL_CONSTEXPR bool isReferenceCountingNative(); static Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree(); @@ -118,6 +121,36 @@ public: int fetchAndAddAcquire(int valueToAdd); int fetchAndAddRelease(int valueToAdd); int fetchAndAddOrdered(int valueToAdd); + + int fetchAndSubRelaxed(int valueToSub); + int fetchAndSubAcquire(int valueToSub); + int fetchAndSubRelease(int valueToSub); + int fetchAndSubOrdered(int valueToSub); + + int fetchAndOrRelaxed(int valueToOr); + int fetchAndOrAcquire(int valueToOr); + int fetchAndOrRelease(int valueToOr); + int fetchAndOrOrdered(int valueToOr); + + int fetchAndAndRelaxed(int valueToAnd); + int fetchAndAndAcquire(int valueToAnd); + int fetchAndAndRelease(int valueToAnd); + int fetchAndAndOrdered(int valueToAnd); + + int fetchAndXorRelaxed(int valueToXor); + int fetchAndXorAcquire(int valueToXor); + int fetchAndXorRelease(int valueToXor); + int fetchAndXorOrdered(int valueToXor); + + int operator++(); + int operator++(int); + int operator--(); + int operator--(int); + int operator+=(int value); + int operator-=(int value); + int operator|=(int value); + int operator&=(int value); + int operator^=(int value); #endif }; -- cgit v1.2.3