From d053a72f537265c7c39ed4bf66c2413b7327ac5e Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 25 Nov 2020 13:06:37 +0100 Subject: Smaller cleanup in QBindingStorage Unify code paths and avoid excessive code generation. Change-Id: I4a54234dd322bba380cc45d4f9c97d97a0c93303 Reviewed-by: Fabian Kosmale (cherry picked from commit 65759c9867321d978c1f98f5cf66bef11c8f5c15) Reviewed-by: Lars Knoll --- src/corelib/kernel/qproperty.cpp | 22 +++++++++++----------- 1 file 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(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(data)); - storage->registerWithCurrentlyEvaluatingBinding(); + binding->evaluateIfDirtyAndReturnTrueIfValueChanged(const_cast(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 -- cgit v1.2.3