From e095bebaf5f3a437c72f02a5d8c63ae88e15a394 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 25 Nov 2020 13:06:37 +0100 Subject: [PATCH] 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: Ulf Hermann --- 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 01204199cb5..a93fcdad031 100644 --- a/src/corelib/kernel/qproperty.cpp +++ b/src/corelib/kernel/qproperty.cpp @@ -1438,10 +1438,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 @@ -1454,6 +1457,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; @@ -1499,14 +1504,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 @@ -1516,10 +1519,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