summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-11-25 13:06:37 +0100
committerLars Knoll <lars.knoll@qt.io>2020-11-27 10:59:31 +0100
commitd053a72f537265c7c39ed4bf66c2413b7327ac5e (patch)
treec657bab942d552e54962bf362e908662155b7bce
parentfd4619bdae00842694bda9ced334452301b239d8 (diff)
Smaller cleanup in QBindingStorage
Unify code paths and avoid excessive code generation. Change-Id: I4a54234dd322bba380cc45d4f9c97d97a0c93303 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> (cherry picked from commit 65759c9867321d978c1f98f5cf66bef11c8f5c15) Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--src/corelib/kernel/qproperty.cpp22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp
index 47a572f548..b627420d5e 100644
--- a/src/corelib/kernel/qproperty.cpp
+++ b/src/corelib/kernel/qproperty.cpp
@@ -1401,10 +1401,13 @@ struct QBindingStoragePrivate
}
return nullptr;
}
- QPropertyBindingData *getAndCreate(QUntypedPropertyData *data)
+ QPropertyBindingData *get(QUntypedPropertyData *data, bool create)
{
- if (!d)
+ if (!d) {
+ if (!create)
+ return nullptr;
reallocate(8);
+ }
else if (d->used*2 >= d->size)
reallocate(d->size*2);
Q_ASSERT(d->size && (d->size & (d->size - 1)) == 0); // size is a power of two
@@ -1417,6 +1420,8 @@ struct QBindingStoragePrivate
if (index == d->size)
index = 0;
}
+ if (!create)
+ return nullptr;
++d->used;
new (p + index) Pair{data, QPropertyBindingData()};
return &p[index].bindingData;
@@ -1462,14 +1467,12 @@ void QBindingStorage::maybeUpdateBindingAndRegister_helper(const QUntypedPropert
{
Q_ASSERT(bindingStatus);
QUntypedPropertyData *dd = const_cast<QUntypedPropertyData *>(data);
- auto storage = bindingStatus->currentlyEvaluatingBinding ?
- QBindingStoragePrivate(d).getAndCreate(dd) :
- (d ? QBindingStoragePrivate(d).get(dd) : nullptr);
+ auto storage = QBindingStoragePrivate(d).get(dd, /*create=*/ bindingStatus->currentlyEvaluatingBinding != nullptr);
if (!storage)
return;
if (auto *binding = storage->binding())
- binding->evaluateIfDirtyAndReturnTrueIfValueChanged(const_cast<QUntypedPropertyData *>(data));
- storage->registerWithCurrentlyEvaluatingBinding();
+ binding->evaluateIfDirtyAndReturnTrueIfValueChanged(const_cast<QUntypedPropertyData *>(data), bindingStatus);
+ storage->registerWithCurrentlyEvaluatingBinding(bindingStatus->currentlyEvaluatingBinding);
}
QPropertyBindingData *QBindingStorage::bindingData_helper(const QUntypedPropertyData *data) const
@@ -1479,10 +1482,7 @@ QPropertyBindingData *QBindingStorage::bindingData_helper(const QUntypedProperty
QPropertyBindingData *QBindingStorage::bindingData_helper(QUntypedPropertyData *data, bool create)
{
- auto storage = create ?
- QBindingStoragePrivate(d).getAndCreate(data) :
- QBindingStoragePrivate(d).get(data);
- return storage;
+ return QBindingStoragePrivate(d).get(data, create);
}
QT_END_NAMESPACE