summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2020-04-30 08:34:42 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-06-25 14:11:56 +0200
commitb20c7df63aec36cb3cb871e4b898b0e684dcb59a (patch)
tree9c2e2dc72ef823d4e92f3ed2cf043ac68d03baf5
parente18a060c034beec6c7f4a22044255d9fb55d091a (diff)
Remove QPropertyMemberChangeHandler again
Adding support for a static notifier within QProperty itself - through a QProperty "sister" class - is more efficient in terms of memory consumption and run-time performance. The MemberChangeHandler permanently takes up at least three pointers, while the notified properties only cost one pointer in the binding. Change-Id: Ia1a8c2b66f1f3c2fe13ae0ad9f12cdb6bdcc35ef Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/corelib/kernel/qproperty.h23
-rw-r--r--tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp20
2 files changed, 0 insertions, 43 deletions
diff --git a/src/corelib/kernel/qproperty.h b/src/corelib/kernel/qproperty.h
index 5ba4d2eda7..de08a71349 100644
--- a/src/corelib/kernel/qproperty.h
+++ b/src/corelib/kernel/qproperty.h
@@ -731,28 +731,6 @@ QPropertyChangeHandler<Functor> QNotifiedProperty<T, Callback, ValueGuard>::subs
return onValueChanged(f);
}
-template <auto propertyMember, auto callbackMember>
-struct QPropertyMemberChangeHandler;
-
-template<typename Class, typename PropertyType, PropertyType Class::* PropertyMember, void(Class::*Callback)()>
-struct QPropertyMemberChangeHandler<PropertyMember, Callback> : public QPropertyObserver
-{
- QPropertyMemberChangeHandler(Class *obj)
- : QPropertyObserver(notify)
- {
- setSource(obj->*PropertyMember);
- }
-
- static void notify(QPropertyObserver *, void *propertyDataPtr)
- {
- // memberOffset is the offset of the QProperty<> member within the class. We get the absolute address
- // of that member and subtracting the relative offset gives us the address of the class instance.
- const size_t memberOffset = reinterpret_cast<size_t>(&(static_cast<Class *>(nullptr)->*PropertyMember));
- Class *obj = reinterpret_cast<Class *>(reinterpret_cast<char *>(propertyDataPtr) - memberOffset);
- (obj->*Callback)();
- }
-};
-
template<typename T>
class QPropertyAlias : public QPropertyObserver
{
@@ -892,7 +870,6 @@ public:
return aliasedProperty<T>() != nullptr;
}
};
-
QT_END_NAMESPACE
#endif // QPROPERTY_H
diff --git a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
index 53d361ca26..cafc193257 100644
--- a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
+++ b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
@@ -67,7 +67,6 @@ private slots:
void settingPropertyValueDoesRemoveBinding();
void genericPropertyBinding();
void genericPropertyBindingBool();
- void staticChangeHandler();
void setBindingFunctor();
void multipleObservers();
void propertyAlias();
@@ -661,25 +660,6 @@ void tst_QProperty::genericPropertyBindingBool()
QVERIFY(property.value());
}
-struct ItemType
-{
- QProperty<int> x;
- QVector<int> observedValues;
- void xChanged() {
- observedValues << x.value();
- }
- QPropertyMemberChangeHandler<&ItemType::x, &ItemType::xChanged> test{this};
-};
-
-void tst_QProperty::staticChangeHandler()
-{
- ItemType t;
- t.x = 42;
- t.x = 100;
- QVector<int> values{42, 100};
- QCOMPARE(t.observedValues, values);
-}
-
void tst_QProperty::setBindingFunctor()
{
QProperty<int> property;