diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-08-12 11:33:13 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-09-02 22:44:27 +0200 |
commit | 331c106bdbf12c6925c2c40f3813b71c65caf9a2 (patch) | |
tree | 4a44b8be13f5e636ad7f0a38f1474b438531cc5d /src/corelib/kernel | |
parent | 733d890430542e907b9014a2cf73d63edf931245 (diff) |
Remove the special handling of QProperty<bool>
Since we will be storing property data differently in most cases,
having this special case would create too many additional complications.
Change-Id: I27042b0730559bb375d8e3c07324398403a9885d
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qproperty.cpp | 31 | ||||
-rw-r--r-- | src/corelib/kernel/qproperty_p.h | 4 | ||||
-rw-r--r-- | src/corelib/kernel/qpropertyprivate.h | 22 |
3 files changed, 5 insertions, 52 deletions
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp index a0cdda4200..bd623bed18 100644 --- a/src/corelib/kernel/qproperty.cpp +++ b/src/corelib/kernel/qproperty.cpp @@ -86,15 +86,8 @@ void QPropertyBindingPrivate::markDirtyAndNotifyObservers() dirty = true; if (firstObserver) firstObserver.notify(this, propertyDataPtr); - if (hasStaticObserver) { - if (isBool) { - auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr); - bool oldValue = propertyPtr->extraBit(); - staticObserverCallback(staticObserver, &oldValue); - } else { - staticObserverCallback(staticObserver, propertyDataPtr); - } - } + if (hasStaticObserver) + staticObserverCallback(staticObserver, propertyDataPtr); } bool QPropertyBindingPrivate::evaluateIfDirtyAndReturnTrueIfValueChanged() @@ -123,25 +116,9 @@ bool QPropertyBindingPrivate::evaluateIfDirtyAndReturnTrueIfValueChanged() bool changed = false; if (hasStaticObserver && staticGuardCallback) { - if (isBool) { - auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr); - bool newValue = propertyPtr->extraBit(); - changed = staticGuardCallback(metaType, &newValue, evaluationFunction, staticObserver); - if (changed && !error.hasError()) - propertyPtr->setExtraBit(newValue); - } else { - changed = staticGuardCallback(metaType, propertyDataPtr, evaluationFunction, staticObserver); - } + changed = staticGuardCallback(metaType, propertyDataPtr, evaluationFunction, staticObserver); } else { - if (isBool) { - auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr); - bool newValue = propertyPtr->extraBit(); - changed = evaluationFunction(metaType, &newValue); - if (changed && !error.hasError()) - propertyPtr->setExtraBit(newValue); - } else { - changed = evaluationFunction(metaType, propertyDataPtr); - } + changed = evaluationFunction(metaType, propertyDataPtr); } dirty = false; diff --git a/src/corelib/kernel/qproperty_p.h b/src/corelib/kernel/qproperty_p.h index 9c43c23959..4cb55f8b47 100644 --- a/src/corelib/kernel/qproperty_p.h +++ b/src/corelib/kernel/qproperty_p.h @@ -140,7 +140,6 @@ private: bool dirty = false; bool updating = false; bool hasStaticObserver = false; - bool isBool = false; QUntypedPropertyBinding::BindingEvaluationFunction evaluationFunction; @@ -168,8 +167,7 @@ public: QPropertyBindingPrivate(QMetaType metaType, QUntypedPropertyBinding::BindingEvaluationFunction evaluationFunction, const QPropertyBindingSourceLocation &location) - : isBool(metaType.id() == QMetaType::Bool) - , evaluationFunction(std::move(evaluationFunction)) + : evaluationFunction(std::move(evaluationFunction)) , inlineDependencyObservers() // Explicit initialization required because of union , location(location) , metaType(metaType) diff --git a/src/corelib/kernel/qpropertyprivate.h b/src/corelib/kernel/qpropertyprivate.h index 4d8a457e32..fe6895d953 100644 --- a/src/corelib/kernel/qpropertyprivate.h +++ b/src/corelib/kernel/qpropertyprivate.h @@ -157,28 +157,6 @@ public: } }; -template<> -struct QPropertyValueStorage<bool> -{ - QPropertyBase priv; - - QPropertyValueStorage() = default; - Q_DISABLE_COPY(QPropertyValueStorage) - explicit QPropertyValueStorage(bool initialValue) { priv.setExtraBit(initialValue); } - QPropertyValueStorage &operator=(bool newValue) { priv.setExtraBit(newValue); return *this; } - QPropertyValueStorage(QPropertyValueStorage &&other) : priv(std::move(other.priv), this) {} - QPropertyValueStorage &operator=(QPropertyValueStorage &&other) { priv.moveAssign(std::move(other.priv), this); return *this; } - - bool getValue() const { return priv.extraBit(); } - bool setValueAndReturnTrueIfChanged(bool v) - { - if (v == priv.extraBit()) - return false; - priv.setExtraBit(v); - return true; - } -}; - template <typename T, typename Tag> class QTagPreservingPointerToPointer { |