From 2b00f97ab05f144293b26d1e0d8cf4c54d222f92 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 6 Aug 2012 18:03:49 +0200 Subject: Add Q_DECL_CONSTEXPR to the isXXX functions in the new atomics. This allows one to write code that depends on these values at compile-time. Change-Id: I7d78524ed9c70d4141360496d1d764dcbfa92e62 Reviewed-by: Marc Mutz Reviewed-by: Thiago Macieira --- src/corelib/arch/qatomic_armv5.h | 4 ++-- src/corelib/arch/qatomic_armv6.h | 10 +++++----- src/corelib/arch/qatomic_cxx11.h | 16 ++++++++-------- src/corelib/arch/qatomic_gcc.h | 4 ++-- src/corelib/arch/qatomic_ia64.h | 16 ++++++++-------- src/corelib/arch/qatomic_mips.h | 10 +++++----- src/corelib/arch/qatomic_msvc.h | 28 ++++++++++++++-------------- src/corelib/arch/qatomic_unix.h | 12 ++++++------ src/corelib/arch/qatomic_x86.h | 20 ++++++++++---------- 9 files changed, 60 insertions(+), 60 deletions(-) (limited to 'src/corelib/arch') diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h index c43b4de6da..5ccc1c39ff 100644 --- a/src/corelib/arch/qatomic_armv5.h +++ b/src/corelib/arch/qatomic_armv5.h @@ -101,8 +101,8 @@ template struct QBasicAtomicOps: QGenericAtomicOps static bool ref(T &_q_value) Q_DECL_NOTHROW; template static bool deref(T &_q_value) Q_DECL_NOTHROW; - static bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } template static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; template static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW; template static diff --git a/src/corelib/arch/qatomic_armv6.h b/src/corelib/arch/qatomic_armv6.h index 95e1f28c93..1b13f84993 100644 --- a/src/corelib/arch/qatomic_armv6.h +++ b/src/corelib/arch/qatomic_armv6.h @@ -80,18 +80,18 @@ template struct QBasicAtomicOps: QGenericAtomicOps static void orderedMemoryFence(const T &) Q_DECL_NOTHROW; - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } template static bool ref(T &_q_value) Q_DECL_NOTHROW; template static bool deref(T &_q_value) Q_DECL_NOTHROW; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } template static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } template static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } template static T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType::AdditiveT valueToAdd) Q_DECL_NOTHROW; }; diff --git a/src/corelib/arch/qatomic_cxx11.h b/src/corelib/arch/qatomic_cxx11.h index 98e8e7043e..46b94e4029 100644 --- a/src/corelib/arch/qatomic_cxx11.h +++ b/src/corelib/arch/qatomic_cxx11.h @@ -144,8 +144,8 @@ template struct QAtomicOps _q_value.store(newValue, std::memory_order_release); } - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } - static inline bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return false; } static inline bool ref(Type &_q_value) { return ++_q_value != 0; @@ -156,8 +156,8 @@ template struct QAtomicOps return --_q_value != 0; } - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } static bool testAndSetRelaxed(Type &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW @@ -180,8 +180,8 @@ template struct QAtomicOps return _q_value.compare_exchange_strong(expectedValue, newValue, std::memory_order_acq_rel); } - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return false; } - static inline bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return false; } static T fetchAndStoreRelaxed(Type &_q_value, T newValue) Q_DECL_NOTHROW { @@ -203,8 +203,8 @@ template struct QAtomicOps return _q_value.exchange(newValue, std::memory_order_acq_rel); } - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return false; } - static inline bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return false; } static T fetchAndAddRelaxed(Type &_q_value, _AdditiveType valueToAdd) Q_DECL_NOTHROW diff --git a/src/corelib/arch/qatomic_gcc.h b/src/corelib/arch/qatomic_gcc.h index 73df3e785e..2ceb0385ec 100644 --- a/src/corelib/arch/qatomic_gcc.h +++ b/src/corelib/arch/qatomic_gcc.h @@ -98,8 +98,8 @@ template struct QAtomicOps: QGenericAtomicOps > } #endif - static bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW { return __sync_bool_compare_and_swap(&_q_value, expectedValue, newValue); diff --git a/src/corelib/arch/qatomic_ia64.h b/src/corelib/arch/qatomic_ia64.h index 0bf3cf78d4..c6387108e1 100644 --- a/src/corelib/arch/qatomic_ia64.h +++ b/src/corelib/arch/qatomic_ia64.h @@ -154,27 +154,27 @@ template struct QBasicAtomicOps: QGenericAtomicOps(&_q_value) = newValue; } - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } - static inline bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return size == 4 || size == 8; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return size == 4 || size == 8; } template static bool ref(T &_q_value) Q_DECL_NOTHROW; template static bool deref(T &_q_value) Q_DECL_NOTHROW; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } template static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; template static bool testAndSetAcquire(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; template static bool testAndSetRelease(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; template static bool testAndSetOrdered(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } template static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW; template static T fetchAndStoreAcquire(T &_q_value, T newValue) Q_DECL_NOTHROW; template static T fetchAndStoreRelease(T &_q_value, T newValue) Q_DECL_NOTHROW; template static T fetchAndStoreOrdered(T &_q_value, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return false; } template static T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType::AdditiveT valueToAdd) Q_DECL_NOTHROW; template static diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h index 9565d3749f..e662b9abc2 100644 --- a/src/corelib/arch/qatomic_mips.h +++ b/src/corelib/arch/qatomic_mips.h @@ -84,18 +84,18 @@ template struct QBasicAtomicOps: QGenericAtomicOps static void orderedMemoryFence(const T &) Q_DECL_NOTHROW; - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } template static bool ref(T &_q_value) Q_DECL_NOTHROW; template static bool deref(T &_q_value) Q_DECL_NOTHROW; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } template static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } template static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } template static T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType::AdditiveT valueToAdd) Q_DECL_NOTHROW; }; diff --git a/src/corelib/arch/qatomic_msvc.h b/src/corelib/arch/qatomic_msvc.h index a7de122a3e..f5801a2939 100644 --- a/src/corelib/arch/qatomic_msvc.h +++ b/src/corelib/arch/qatomic_msvc.h @@ -276,21 +276,21 @@ struct QAtomicOpsBySize<4> : QGenericAtomicOps > // The 32-bit Interlocked*() API takes parameters as longs. typedef long Type; - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } - static inline bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return true; } static bool ref(long &_q_value) Q_DECL_NOTHROW; static bool deref(long &_q_value) Q_DECL_NOTHROW; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } static bool testAndSetRelaxed(long &_q_value, long expectedValue, long newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } static long fetchAndStoreRelaxed(long &_q_value, long newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } static long fetchAndAddRelaxed(long &_q_value, QAtomicAdditiveType::AdditiveT valueToAdd) Q_DECL_NOTHROW; }; @@ -329,16 +329,16 @@ struct QAtomicOps : QGenericAtomicOps > { typedef T *Type; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } static bool testAndSetRelaxed(T *&_q_value, T *expectedValue, T *newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } static T *fetchAndStoreRelaxed(T *&_q_value, T *newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } static T *fetchAndAddRelaxed(T *&_q_value, qptrdiff valueToAdd) Q_DECL_NOTHROW; }; diff --git a/src/corelib/arch/qatomic_unix.h b/src/corelib/arch/qatomic_unix.h index 3450596173..8c74e6eb7c 100644 --- a/src/corelib/arch/qatomic_unix.h +++ b/src/corelib/arch/qatomic_unix.h @@ -76,8 +76,8 @@ struct QAtomicOps : QGenericAtomicOps > { typedef int Type; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } Q_CORE_EXPORT static bool testAndSetRelaxed(int &_q_value, int expectedValue, int newValue) Q_DECL_NOTHROW; }; @@ -86,8 +86,8 @@ struct QAtomicOps : QGenericAtomicOps > { typedef void *Type; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } Q_CORE_EXPORT static bool testAndSetRelaxed(void *&_q_value, void *expectedValue, void *newValue) Q_DECL_NOTHROW; }; @@ -99,8 +99,8 @@ struct QAtomicOps : QGenericAtomicOps > // helper to strip cv qualifiers static inline void *nocv(const T *p) { return const_cast(static_cast(p)); } - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return false; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return false; } static inline bool testAndSetRelaxed(T *&_q_value, T *expectedValue, T *newValue) Q_DECL_NOTHROW { // forward to the void* specialization diff --git a/src/corelib/arch/qatomic_x86.h b/src/corelib/arch/qatomic_x86.h index 196073a590..094bf1ecb7 100644 --- a/src/corelib/arch/qatomic_x86.h +++ b/src/corelib/arch/qatomic_x86.h @@ -97,21 +97,21 @@ template<> struct QAtomicIntegerTraits { enum { IsInteger = 1 }; } template struct QBasicAtomicOps: QGenericAtomicOps > { - static inline bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } - static inline bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isReferenceCountingWaitFree() Q_DECL_NOTHROW { return true; } template static bool ref(T &_q_value) Q_DECL_NOTHROW; template static bool deref(T &_q_value) Q_DECL_NOTHROW; - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } template static bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndStoreWaitFree() Q_DECL_NOTHROW { return true; } template static T fetchAndStoreRelaxed(T &_q_value, T newValue) Q_DECL_NOTHROW; - static inline bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } - static inline bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isFetchAndAddWaitFree() Q_DECL_NOTHROW { return true; } template static T fetchAndAddRelaxed(T &_q_value, typename QAtomicAdditiveType::AdditiveT valueToAdd) Q_DECL_NOTHROW; }; @@ -381,8 +381,8 @@ bool QBasicAtomicOps<8>::deref(T &_q_value) Q_DECL_NOTHROW // i386 architecture, emulate 64-bit support via cmpxchg8b template <> struct QBasicAtomicOps<8>: QGenericAtomicOps > { - static inline bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } - static inline bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetNative() Q_DECL_NOTHROW { return true; } + static inline Q_DECL_CONSTEXPR bool isTestAndSetWaitFree() Q_DECL_NOTHROW { return true; } template static inline bool testAndSetRelaxed(T &_q_value, T expectedValue, T newValue) Q_DECL_NOTHROW { -- cgit v1.2.3