diff options
author | Brett Stottlemyer <bstottle@ford.com> | 2021-07-20 07:44:55 -0400 |
---|---|---|
committer | Brett Stottlemyer <bstottle@ford.com> | 2021-08-04 10:42:18 -0400 |
commit | f43e2918d05df688c19d3164b43418747d4ac2ef (patch) | |
tree | 4ea15423c76fc79db30f0c159d465bbd210fabf5 | |
parent | 6892ef6d4577410385e315a4366aa3b6e449c435 (diff) |
Refactor decodeVariant to pass by rvalue ref/std::move
The decodeVariant calls were weird in how their parameters were pass by
reference so they could be changed, but without forcing a copy. It is
clearer to pass by rvalue ref, using std::move on the calling side.
This rippled up to calls that called the method, including setProperties
which is part of the repc generated code.
Because of the repc change, this should *not* be picked to Qt5.
Pick-to: 6.2
Change-Id: Ieb1b0620569ad8eb9797edc57cc189d0b426510c
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
-rw-r--r-- | src/remoteobjects/qremoteobjectabstractitemmodelreplica.cpp | 2 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectnode.cpp | 12 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectpacket.cpp | 6 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectpacket_p.h | 4 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectregistry.cpp | 2 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectreplica.cpp | 30 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectreplica.h | 2 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectreplica_p.h | 16 | ||||
-rw-r--r-- | src/remoteobjects/qremoteobjectsourceio.cpp | 2 | ||||
-rw-r--r-- | tools/repc/repcodegenerator.cpp | 2 |
10 files changed, 40 insertions, 38 deletions
diff --git a/src/remoteobjects/qremoteobjectabstractitemmodelreplica.cpp b/src/remoteobjects/qremoteobjectabstractitemmodelreplica.cpp index 8e2a8c0..099415f 100644 --- a/src/remoteobjects/qremoteobjectabstractitemmodelreplica.cpp +++ b/src/remoteobjects/qremoteobjectabstractitemmodelreplica.cpp @@ -105,7 +105,7 @@ void QAbstractItemModelReplicaImplementation::initialize() QVariantList properties; properties << QVariant::fromValue(QList<int>()); properties << QVariant::fromValue(QIntHash()); - setProperties(properties); + setProperties(std::move(properties)); } void QAbstractItemModelReplicaImplementation::registerMetatypes() diff --git a/src/remoteobjects/qremoteobjectnode.cpp b/src/remoteobjects/qremoteobjectnode.cpp index 93b87c3..6c0c308 100644 --- a/src/remoteobjects/qremoteobjectnode.cpp +++ b/src/remoteobjects/qremoteobjectnode.cpp @@ -1486,7 +1486,7 @@ void QRemoteObjectNodePrivate::onClientRead(QObject *obj) if (rep) { handlePointerToQObjectProperties(rep.data(), rxArgs); - rep->initialize(rxArgs); + rep->initialize(std::move(rxArgs)); } else { //replica has been deleted, remove from list replicas.remove(rxName); } @@ -1502,7 +1502,7 @@ void QRemoteObjectNodePrivate::onClientRead(QObject *obj) { rep->setDynamicMetaObject(meta); handlePointerToQObjectProperties(rep.data(), rxArgs); - rep->setDynamicProperties(rxArgs); + rep->setDynamicProperties(std::move(rxArgs)); } else { //replica has been deleted, remove from list replicas.remove(rxName); } @@ -1548,7 +1548,7 @@ void QRemoteObjectNodePrivate::onClientRead(QObject *obj) QDataStream ds(typeInfo.parameters); ds >> rxValue; } - rep->setProperty(propertyIndex, decodeVariant(rxValue, property.metaType())); + rep->setProperty(propertyIndex, decodeVariant(std::move(rxValue), property.metaType())); } } else { //replica has been deleted, remove from list replicas.remove(rxName); @@ -1572,7 +1572,7 @@ void QRemoteObjectNodePrivate::onClientRead(QObject *obj) if (signal.parameterType(i) == QMetaType::QVariant) param[i + 1] = const_cast<void*>(reinterpret_cast<const void*>(&rxArgs.at(i))); else { - decodeVariant(rxArgs[i], signal.parameterMetaType(i)); + rxArgs[i] = decodeVariant(std::move(rxArgs[i]), signal.parameterMetaType(i)); param[i + 1] = const_cast<void *>(rxArgs.at(i).data()); } } @@ -2226,12 +2226,12 @@ QVariant QRemoteObjectNodePrivate::handlePointerToQObjectProperty(QConnectedRepl if (!childInfo.parameters.isEmpty()) ds >> parameters; handlePointerToQObjectProperties(childRep.data(), parameters); - childRep->setDynamicProperties(parameters); + childRep->setDynamicProperties(std::move(parameters)); } else { if (!childInfo.parameters.isEmpty()) ds >> parameters; handlePointerToQObjectProperties(childRep.data(), parameters); - childRep->initialize(parameters); + childRep->initialize(std::move(parameters)); } return retval; diff --git a/src/remoteobjects/qremoteobjectpacket.cpp b/src/remoteobjects/qremoteobjectpacket.cpp index 6d6d44a..ed8b302 100644 --- a/src/remoteobjects/qremoteobjectpacket.cpp +++ b/src/remoteobjects/qremoteobjectpacket.cpp @@ -79,7 +79,7 @@ namespace QRemoteObjectPackets { // to integers (encodeVariant) when sending them. On the receive side, the we know the // types of properties and the signatures for methods, so we can use that information to // decode the integer variant into an enum variant (via decodeVariant). -const QVariant encodeVariant(const QVariant &value) +QVariant encodeVariant(const QVariant &value) { const auto metaType = value.metaType(); if (metaType.flags().testFlag(QMetaType::IsEnumeration)) { @@ -103,7 +103,7 @@ const QVariant encodeVariant(const QVariant &value) return value; } -QVariant &decodeVariant(QVariant &value, QMetaType metaType) +QVariant decodeVariant(QVariant &&value, QMetaType metaType) { if (metaType.flags().testFlag(QMetaType::IsEnumeration)) { #ifdef QTRO_VERBOSE_PROTOCOL @@ -114,7 +114,7 @@ QVariant &decodeVariant(QVariant &value, QMetaType metaType) qDebug() << "Converting to enum from integer type" << value << encoded; #endif } - return value; + return std::move(value); } void QDataStreamCodec::serializeProperty(const QRemoteObjectSourceBase *source, int internalIndex) diff --git a/src/remoteobjects/qremoteobjectpacket_p.h b/src/remoteobjects/qremoteobjectpacket_p.h index e532042..b3809f5 100644 --- a/src/remoteobjects/qremoteobjectpacket_p.h +++ b/src/remoteobjects/qremoteobjectpacket_p.h @@ -260,8 +260,8 @@ private: DataStreamPacket m_packet; }; -const QVariant encodeVariant(const QVariant &value); -QVariant &decodeVariant(QVariant &value, QMetaType metaType); +QVariant encodeVariant(const QVariant &value); +QVariant decodeVariant(QVariant &&value, QMetaType metaType); } // namespace QRemoteObjectPackets diff --git a/src/remoteobjects/qremoteobjectregistry.cpp b/src/remoteobjects/qremoteobjectregistry.cpp index f6109dc..6052f1e 100644 --- a/src/remoteobjects/qremoteobjectregistry.cpp +++ b/src/remoteobjects/qremoteobjectregistry.cpp @@ -136,7 +136,7 @@ void QRemoteObjectRegistry::initialize() properties << QVariant::fromValue(QRemoteObjectSourceLocations()); properties << QVariant::fromValue(QRemoteObjectSourceLocation()); properties << QVariant::fromValue(QRemoteObjectSourceLocation()); - setProperties(properties); + setProperties(std::move(properties)); } void QRemoteObjectRegistry::notifySourceLocationsChanged() diff --git a/src/remoteobjects/qremoteobjectreplica.cpp b/src/remoteobjects/qremoteobjectreplica.cpp index 00e6136..d02c095 100644 --- a/src/remoteobjects/qremoteobjectreplica.cpp +++ b/src/remoteobjects/qremoteobjectreplica.cpp @@ -211,7 +211,7 @@ QList<int> QConnectedReplicaImplementation::childIndices() const return m_childIndices; } -void QConnectedReplicaImplementation::initialize(QVariantList &values) +void QConnectedReplicaImplementation::initialize(QVariantList &&values) { qCDebug(QT_REMOTEOBJECT) << "initialize()" << m_propertyStorage.size(); const int nParam = int(values.size()); @@ -222,10 +222,12 @@ void QConnectedReplicaImplementation::initialize(QVariantList &values) changedProperties[i] = -1; if (m_propertyStorage[i] != values.at(i)) { const QMetaProperty property = m_metaObject->property(i+offset); - m_propertyStorage[i] = QRemoteObjectPackets::decodeVariant(values[i], property.metaType()); + m_propertyStorage[i] = QRemoteObjectPackets::decodeVariant(std::move(values[i]), property.metaType()); changedProperties[i] = i; } - qCDebug(QT_REMOTEOBJECT) << "SETPROPERTY" << i << m_metaObject->property(i+offset).name() << values.at(i).typeName() << values.at(i).toString(); + qCDebug(QT_REMOTEOBJECT) << "SETPROPERTY" << i << m_metaObject->property(i+offset).name() + << m_propertyStorage[i].typeName() + << m_propertyStorage[i].toString(); } Q_ASSERT(m_state.loadAcquire() < QRemoteObjectReplica::Valid || m_state.loadAcquire() == QRemoteObjectReplica::Suspect); @@ -299,15 +301,15 @@ void QConnectedReplicaImplementation::setDynamicMetaObject(const QMetaObject *me } } -void QRemoteObjectReplicaImplementation::setDynamicProperties(const QVariantList &values) +void QRemoteObjectReplicaImplementation::setDynamicProperties(QVariantList &&values) { //rely on order of properties; - setProperties(values); + setProperties(std::move(values)); } -void QConnectedReplicaImplementation::setDynamicProperties(const QVariantList &values) +void QConnectedReplicaImplementation::setDynamicProperties(QVariantList &&values) { - QRemoteObjectReplicaImplementation::setDynamicProperties(values); + QRemoteObjectReplicaImplementation::setDynamicProperties(std::move(values)); for (QRemoteObjectReplica *obj : qExchange(m_parentsNeedingConnect, {})) configurePrivate(obj); @@ -479,11 +481,11 @@ const QVariant QConnectedReplicaImplementation::getProperty(int i) const return m_propertyStorage[i]; } -void QConnectedReplicaImplementation::setProperties(const QVariantList &properties) +void QConnectedReplicaImplementation::setProperties(QVariantList &&properties) { Q_ASSERT(m_propertyStorage.isEmpty()); m_propertyStorage.reserve(properties.length()); - m_propertyStorage = properties; + m_propertyStorage = std::move(properties); } void QConnectedReplicaImplementation::setProperty(int i, const QVariant &prop) @@ -769,9 +771,9 @@ void QRemoteObjectReplica::initializeNode(QRemoteObjectNode *node, const QString /*! \internal */ -void QRemoteObjectReplica::setProperties(const QVariantList &properties) +void QRemoteObjectReplica::setProperties(QVariantList &&properties) { - d_impl->setProperties(properties); + d_impl->setProperties(std::move(properties)); } /*! @@ -871,7 +873,7 @@ const QVariant QInProcessReplicaImplementation::getProperty(int i) const return connectionToSource->m_object->metaObject()->property(index).read(connectionToSource->m_object); } -void QInProcessReplicaImplementation::setProperties(const QVariantList &) +void QInProcessReplicaImplementation::setProperties(QVariantList &&) { //TODO some verification here maybe? } @@ -935,11 +937,11 @@ const QVariant QStubReplicaImplementation::getProperty(int i) const return m_propertyStorage[i]; } -void QStubReplicaImplementation::setProperties(const QVariantList &properties) +void QStubReplicaImplementation::setProperties(QVariantList &&properties) { Q_ASSERT(m_propertyStorage.isEmpty()); m_propertyStorage.reserve(properties.length()); - m_propertyStorage = properties; + m_propertyStorage = std::move(properties); } void QStubReplicaImplementation::setProperty(int i, const QVariant &prop) diff --git a/src/remoteobjects/qremoteobjectreplica.h b/src/remoteobjects/qremoteobjectreplica.h index 368cd46..c77149b 100644 --- a/src/remoteobjects/qremoteobjectreplica.h +++ b/src/remoteobjects/qremoteobjectreplica.h @@ -94,7 +94,7 @@ protected: QRemoteObjectPendingCall sendWithReply(QMetaObject::Call call, int index, const QVariantList &args); protected: - void setProperties(const QVariantList &); + void setProperties(QVariantList &&); void setChild(int i, const QVariant &); const QVariant propAsVariant(int i) const; void persistProperties(const QString &repName, const QByteArray &repSig, const QVariantList &props) const; diff --git a/src/remoteobjects/qremoteobjectreplica_p.h b/src/remoteobjects/qremoteobjectreplica_p.h index dde0317..9234ae5 100644 --- a/src/remoteobjects/qremoteobjectreplica_p.h +++ b/src/remoteobjects/qremoteobjectreplica_p.h @@ -73,7 +73,7 @@ class QReplicaImplementationInterface public: virtual ~QReplicaImplementationInterface() {} virtual const QVariant getProperty(int i) const = 0; - virtual void setProperties(const QVariantList &) = 0; + virtual void setProperties(QVariantList &&) = 0; virtual void setProperty(int i, const QVariant &) = 0; virtual bool isInitialized() const = 0; virtual QRemoteObjectReplica::State state() const = 0; @@ -91,7 +91,7 @@ public: ~QStubReplicaImplementation() override; const QVariant getProperty(int i) const override; - void setProperties(const QVariantList &) override; + void setProperties(QVariantList &&) override; void setProperty(int i, const QVariant &) override; bool isInitialized() const override { return false; } QRemoteObjectReplica::State state() const override { return QRemoteObjectReplica::State::Uninitialized;} @@ -112,7 +112,7 @@ public: bool needsDynamicInitialization() const; const QVariant getProperty(int i) const override = 0; - void setProperties(const QVariantList &) override = 0; + void setProperties(QVariantList &&) override = 0; void setProperty(int i, const QVariant &) override = 0; virtual bool isShortCircuit() const = 0; bool isInitialized() const override { return true; } @@ -131,7 +131,7 @@ public: //Dynamic replica functions virtual void setDynamicMetaObject(const QMetaObject *meta); - virtual void setDynamicProperties(const QVariantList &values); + virtual void setDynamicProperties(QVariantList &&values); QString m_objectName; const QMetaObject *m_metaObject; @@ -152,13 +152,13 @@ public: explicit QConnectedReplicaImplementation(const QString &name, const QMetaObject *, QRemoteObjectNode *); ~QConnectedReplicaImplementation() override; const QVariant getProperty(int i) const override; - void setProperties(const QVariantList &) override; + void setProperties(QVariantList &&) override; void setProperty(int i, const QVariant &) override; bool isShortCircuit() const final { return false; } bool isInitialized() const override; bool waitForSource(int timeout) override; QList<int> childIndices() const; - void initialize(QVariantList &values); + void initialize(QVariantList &&values); void configurePrivate(QRemoteObjectReplica *) override; void requestRemoteObjectSource(); bool sendCommand(); @@ -172,7 +172,7 @@ public: QRemoteObjectPendingCall _q_sendWithReply(QMetaObject::Call call, int index, const QVariantList& args) override; void setDynamicMetaObject(const QMetaObject *meta) override; - void setDynamicProperties(const QVariantList&) override; + void setDynamicProperties(QVariantList &&) override; QList<QRemoteObjectReplica *> m_parentsNeedingConnect; QVariantList m_propertyStorage; QList<int> m_childIndices; @@ -191,7 +191,7 @@ public: ~QInProcessReplicaImplementation() override; const QVariant getProperty(int i) const override; - void setProperties(const QVariantList &) override; + void setProperties(QVariantList &&) override; void setProperty(int i, const QVariant &) override; bool isShortCircuit() const final { return true; } diff --git a/src/remoteobjects/qremoteobjectsourceio.cpp b/src/remoteobjects/qremoteobjectsourceio.cpp index b59fa6d..13cfde2 100644 --- a/src/remoteobjects/qremoteobjectsourceio.cpp +++ b/src/remoteobjects/qremoteobjectsourceio.cpp @@ -239,7 +239,7 @@ void QRemoteObjectSourceIo::onServerRead(QObject *conn) auto method = source->m_object->metaObject()->method(resolvedIndex); const int parameterCount = method.parameterCount(); for (int i = 0; i < parameterCount; i++) - decodeVariant(m_rxArgs[i], method.parameterMetaType(i)); + m_rxArgs[i] = decodeVariant(std::move(m_rxArgs[i]), method.parameterMetaType(i)); } auto metaType = QMetaType::fromName(source->m_api->typeName(index).constData()); if (!metaType.sizeOf()) diff --git a/tools/repc/repcodegenerator.cpp b/tools/repc/repcodegenerator.cpp index ac58130..2f67f92 100644 --- a/tools/repc/repcodegenerator.cpp +++ b/tools/repc/repcodegenerator.cpp @@ -742,7 +742,7 @@ void RepCodeGenerator::generateClass(Mode mode, QTextStream &out, const ASTClass } out << " }" << Qt::endl; } - out << " setProperties(properties);" << Qt::endl; + out << " setProperties(std::move(properties));" << Qt::endl; out << " }" << Qt::endl; } else if (mode == SOURCE) { out << " explicit " << className << "(QObject *parent = nullptr) : QObject(parent)" << Qt::endl; |