diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/arch/qatomic_bootstrap.h | 95 | ||||
-rw-r--r-- | src/corelib/thread/qbasicatomic.h | 5 | ||||
-rw-r--r-- | src/corelib/thread/qoldbasicatomic.h | 4 |
3 files changed, 42 insertions, 62 deletions
diff --git a/src/corelib/arch/qatomic_bootstrap.h b/src/corelib/arch/qatomic_bootstrap.h index 901611c592..4115b43444 100644 --- a/src/corelib/arch/qatomic_bootstrap.h +++ b/src/corelib/arch/qatomic_bootstrap.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2011 Thiago Macieira <thiago@kde.org> ** All rights reserved. ** Contact: http://www.qt-project.org/ ** @@ -42,76 +43,54 @@ #ifndef QATOMIC_BOOTSTRAP_H #define QATOMIC_BOOTSTRAP_H +#include <QtCore/qgenericatomic.h> + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -inline bool QBasicAtomicInt::ref() -{ - return ++_q_value != 0; -} +#if 0 +#pragma qt_sync_stop_processing +#endif -inline bool QBasicAtomicInt::deref() +template<> struct QAtomicIntegerTraits<int> { enum { IsInteger = 1 }; }; +template <typename T> struct QAtomicOps: QGenericAtomicOps<QAtomicOps<T> > { - return --_q_value != 0; -} + typedef T Type; -inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue) -{ - if (_q_value == expectedValue) { - _q_value = newValue; - return true; + static bool ref(T &_q_value) + { + return ++_q_value != 0; + } + static bool deref(T &_q_value) + { + return --_q_value != 0; } - return false; -} - -inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue) -{ - return testAndSetOrdered(expectedValue, newValue); -} - -inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd) -{ - int returnValue = _q_value; - _q_value += valueToAdd; - return returnValue; -} - -inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} - -inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} - -inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd) -{ - return fetchAndAddOrdered(valueToAdd); -} + static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) + { + if (_q_value == expectedValue) { + _q_value = newValue; + return true; + } + return false; + } -template <typename T> -Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) -{ - if (_q_value == expectedValue) { + static T fetchAndStoreRelaxed(T &_q_value, T newValue) + { + T tmp = _q_value; _q_value = newValue; - return true; + return tmp; + } + + static + T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType<T>::AdditiveT valueToAdd) + { + T returnValue = _q_value; + _q_value += valueToAdd; + return returnValue; } - return false; -} +}; QT_END_NAMESPACE diff --git a/src/corelib/thread/qbasicatomic.h b/src/corelib/thread/qbasicatomic.h index 91df7501a0..fd32c55ed0 100644 --- a/src/corelib/thread/qbasicatomic.h +++ b/src/corelib/thread/qbasicatomic.h @@ -43,7 +43,11 @@ #include <QtCore/qglobal.h> +#if defined(QT_MOC) || defined(QT_BUILD_QMAKE) || defined(QT_RCC) || defined(QT_UIC) || defined(QT_BOOTSTRAPPED) +# include <QtCore/qatomic_bootstrap.h> +#else # define QT_OLD_ATOMICS +#endif #ifdef QT_OLD_ATOMICS # include "qoldbasicatomic.h" @@ -207,4 +211,5 @@ QT_END_HEADER #endif // QT_OLD_ATOMICS + #endif // QBASIC_ATOMIC diff --git a/src/corelib/thread/qoldbasicatomic.h b/src/corelib/thread/qoldbasicatomic.h index 0842bf5f4c..96feb2e491 100644 --- a/src/corelib/thread/qoldbasicatomic.h +++ b/src/corelib/thread/qoldbasicatomic.h @@ -171,10 +171,6 @@ public: QT_END_NAMESPACE QT_END_HEADER -#if defined(QT_MOC) || defined(QT_BUILD_QMAKE) || defined(QT_RCC) || defined(QT_UIC) || defined(QT_BOOTSTRAPPED) -# include <QtCore/qatomic_bootstrap.h> -#else # include <QtCore/qatomic_arch.h> -#endif #endif // QBASIC_ATOMIC |