diff options
author | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2023-05-11 13:25:26 +0200 |
---|---|---|
committer | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2023-05-15 14:02:47 +0200 |
commit | a035e8b76835764924f59ae4610e648875e3e7a6 (patch) | |
tree | b361c93a01e45d7b287973b25e266e776c1f7428 | |
parent | 0f37c477135da0a4b91b7da167bf50d2b0bb0540 (diff) | |
download | qtbase-a035e8b76835764924f59ae4610e648875e3e7a6.tar.gz |
QDBusMetaObjectGenerator: Use uniform loops to iterate over methods
Use the same structure for iterating over signals and other
methods in 3 places. Introduce MethodMap type alias to make
types shorter.
Change-Id: I732b582fc8c47616037087b77a79eb13ecf17019
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/dbus/qdbusmetaobject.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp index 22641c9249..2e367e63ac 100644 --- a/src/dbus/qdbusmetaobject.cpp +++ b/src/dbus/qdbusmetaobject.cpp @@ -55,8 +55,9 @@ private: QByteArray name; }; - QMap<QByteArray, Method> signals_; - QMap<QByteArray, Method> methods; + using MethodMap = QMap<QByteArray, Method>; + MethodMap signals_; + MethodMap methods; QMap<QByteArray, Property> properties; const QDBusIntrospection::Interface *data; @@ -70,7 +71,7 @@ private: void parseSignals(); void parseProperties(); - static qsizetype aggregateParameterCount(const QMap<QByteArray, Method> &map); + static qsizetype aggregateParameterCount(const MethodMap &map); }; static const qsizetype intsPerProperty = 2; @@ -351,7 +352,7 @@ void QDBusMetaObjectGenerator::parseProperties() // Returns the sum of all parameters (including return type) for the given // \a map of methods. This is needed for calculating the size of the methods' // parameter type/name meta-data. -qsizetype QDBusMetaObjectGenerator::aggregateParameterCount(const QMap<QByteArray, Method> &map) +qsizetype QDBusMetaObjectGenerator::aggregateParameterCount(const MethodMap &map) { qsizetype sum = 0; for (const Method &m : map) @@ -403,10 +404,14 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj) qsizetype data_size = idata.size() + (header->methodCount * (QMetaObjectPrivate::IntsPerMethod+intsPerMethod)) + methodParametersDataSize + (header->propertyCount * (QMetaObjectPrivate::IntsPerProperty+intsPerProperty)); - for (const Method &mm : std::as_const(signals_)) - data_size += 2 + mm.inputTypes.size() + mm.outputTypes.size(); - for (const Method &mm : std::as_const(methods)) - data_size += 2 + mm.inputTypes.size() + mm.outputTypes.size(); + + // Signals must be added before other methods, to match moc. + std::array<std::reference_wrapper<const MethodMap>, 2> methodMaps = { signals_, methods }; + + for (const auto &methodMap : methodMaps) { + for (const Method &mm : methodMap.get()) + data_size += 2 + mm.inputTypes.size() + mm.outputTypes.size(); + } idata.resize(data_size + 1); QMetaStringTable strings(className.toLatin1()); @@ -419,9 +424,9 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj) qsizetype totalMetaTypeCount = properties.size(); ++totalMetaTypeCount; // + 1 for metatype of dynamic metaobject - for (const auto& methodContainer: {signals_, methods}) { - for (const auto& method: methodContainer) { - qsizetype argc = method.inputTypes.size() + qMax(qsizetype(0), method.outputTypes.size() - 1); + for (const auto &methodMap : methodMaps) { + for (const Method &mm : methodMap.get()) { + qsizetype argc = mm.inputTypes.size() + qMax(qsizetype(0), mm.outputTypes.size() - 1); totalMetaTypeCount += argc + 1; } } @@ -430,10 +435,9 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj) // add each method: qsizetype currentMethodMetaTypeOffset = properties.size() + 1; - for (int x = 0; x < 2; ++x) { - // Signals must be added before other methods, to match moc. - const QMap<QByteArray, Method> &map = (x == 0) ? signals_ : methods; - for (const Method &mm : map) { + + for (const auto &methodMap : methodMaps) { + for (const Method &mm : methodMap.get()) { qsizetype argc = mm.inputTypes.size() + qMax(qsizetype(0), mm.outputTypes.size() - 1); idata[offset++] = strings.enter(mm.name); |