summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Stottlemyer <bstottle@ford.com>2021-07-20 07:44:55 -0400
committerBrett Stottlemyer <bstottle@ford.com>2021-08-04 10:42:18 -0400
commitf43e2918d05df688c19d3164b43418747d4ac2ef (patch)
tree4ea15423c76fc79db30f0c159d465bbd210fabf5
parent6892ef6d4577410385e315a4366aa3b6e449c435 (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.cpp2
-rw-r--r--src/remoteobjects/qremoteobjectnode.cpp12
-rw-r--r--src/remoteobjects/qremoteobjectpacket.cpp6
-rw-r--r--src/remoteobjects/qremoteobjectpacket_p.h4
-rw-r--r--src/remoteobjects/qremoteobjectregistry.cpp2
-rw-r--r--src/remoteobjects/qremoteobjectreplica.cpp30
-rw-r--r--src/remoteobjects/qremoteobjectreplica.h2
-rw-r--r--src/remoteobjects/qremoteobjectreplica_p.h16
-rw-r--r--src/remoteobjects/qremoteobjectsourceio.cpp2
-rw-r--r--tools/repc/repcodegenerator.cpp2
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;