diff options
author | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-01-15 15:31:00 +0300 |
---|---|---|
committer | Anton Kudryavtsev <a.kudryavtsev@netris.ru> | 2016-01-18 07:53:43 +0000 |
commit | f4d1a471bb87dd4d4bb79b10e8dc434d707711bd (patch) | |
tree | c7ac9009009a293abb88bdf95533c39fca714128 | |
parent | 9e980750c6647ffcf2cb95e95e63fa8335924866 (diff) |
Qml: fix expensive iteration over QHash::keys() and QMap::keys()
Change-Id: I7bb5dd3b49b9f3a638f81156a02d999dbbd932f3
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
-rw-r--r-- | src/qml/jsruntime/qv4runtime.cpp | 6 | ||||
-rw-r--r-- | src/qml/qml/qqmltypeloader.cpp | 5 | ||||
-rw-r--r-- | src/qml/types/qqmllistmodel.cpp | 13 |
3 files changed, 10 insertions, 14 deletions
diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index a1bcec4987..2b133ea59c 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -154,14 +154,14 @@ struct RuntimeCounters::Data { buf.open(QIODevice::WriteOnly); QTextStream outs(&buf); QList<Line> lines; - foreach (const char *func, counters.keys()) { - const Counters &fCount = counters[func]; + for (auto it = counters.cbegin(), end = counters.cend(); it != end; ++it) { + const Counters &fCount = it.value(); for (int i = 0, ei = fCount.size(); i != ei; ++i) { quint64 count = fCount[i]; if (!count) continue; Line line; - line.func = func; + line.func = it.key(); unmangle(i, line.tag1, line.tag2); line.count = count; lines.append(line); diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp index 10be80ed0c..30a4512654 100644 --- a/src/qml/qml/qqmltypeloader.cpp +++ b/src/qml/qml/qqmltypeloader.cpp @@ -2225,7 +2225,10 @@ void QQmlTypeData::allDependenciesDone() for ( ; it != end; ++it) { if (*it == 0) { // This import was not resolved - foreach (const QV4::CompiledData::Import *import, m_unresolvedImports.keys()) { + for (auto keyIt = m_unresolvedImports.keyBegin(), + keyEnd = m_unresolvedImports.keyEnd(); + keyIt != keyEnd; ++keyIt) { + const QV4::CompiledData::Import *import = *keyIt; QQmlError error; error.setDescription(QQmlTypeLoader::tr("module \"%1\" is not installed").arg(stringAt(import->uriIndex))); error.setUrl(m_importCache.baseUrl()); diff --git a/src/qml/types/qqmllistmodel.cpp b/src/qml/types/qqmllistmodel.cpp index a4c0f7043f..28462006a6 100644 --- a/src/qml/types/qqmllistmodel.cpp +++ b/src/qml/types/qqmllistmodel.cpp @@ -1399,13 +1399,8 @@ void DynamicRoleModelNode::sync(DynamicRoleModelNode *src, DynamicRoleModelNode void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int> &roles) { - const QList<QString> &keys = object.keys(); - - QList<QString>::const_iterator it = keys.begin(); - QList<QString>::const_iterator end = keys.end(); - - while (it != end) { - const QString &key = *it; + for (auto it = object.cbegin(), end = object.cend(); it != end; ++it) { + const QString &key = it.key(); int roleIndex = m_owner->m_roles.indexOf(key); if (roleIndex == -1) { @@ -1413,7 +1408,7 @@ void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int> m_owner->m_roles.append(key); } - QVariant value = object[key]; + QVariant value = it.value(); // A JS array/object is translated into a (hierarchical) QQmlListModel, // so translate to a variant map/list first with toVariant(). @@ -1444,8 +1439,6 @@ void DynamicRoleModelNode::updateValues(const QVariantMap &object, QVector<int> if (m_meta->setValue(keyUtf8, value)) roles << roleIndex; - - ++it; } } |