From 552fba23862d2f2c88bd09202b8c1b5904830128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Mon, 8 Jun 2015 22:56:55 +0100 Subject: core: Add several QList::reserve() calls. Reduces reallocations. Change-Id: Ib63539fb690a80245d8fe81ff8468e79ffa8e57c Reviewed-by: Marc Mutz --- src/corelib/io/qresource.cpp | 1 + src/corelib/io/qsettings.cpp | 5 ++++- src/corelib/io/qurlquery.cpp | 1 + src/corelib/itemmodels/qabstractitemmodel.cpp | 1 + src/corelib/itemmodels/qabstractproxymodel.cpp | 1 + src/corelib/itemmodels/qidentityproxymodel.cpp | 3 +++ src/corelib/itemmodels/qsortfilterproxymodel.cpp | 10 ++++++++-- src/corelib/itemmodels/qstringlistmodel.cpp | 4 +++- src/corelib/json/qjsonarray.cpp | 1 + src/corelib/json/qjsonobject.cpp | 2 +- src/corelib/kernel/qmimedata.cpp | 4 +++- src/corelib/mimetypes/qmimedatabase.cpp | 1 + src/corelib/mimetypes/qmimeprovider.cpp | 1 + src/corelib/plugin/qpluginloader.cpp | 4 +++- src/corelib/statemachine/qstatemachine.cpp | 1 + src/corelib/tools/qregularexpression.cpp | 3 ++- src/corelib/tools/qtimezoneprivate.cpp | 1 + 17 files changed, 36 insertions(+), 8 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index fbda081114..345f0bd65d 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -790,6 +790,7 @@ QStringList QResourceRoot::children(int node) const offset += 4; const int child_off = (tree[offset+0] << 24) + (tree[offset+1] << 16) + (tree[offset+2] << 8) + (tree[offset+3] << 0); + ret.reserve(child_count); for(int i = child_off; i < child_off+child_count; ++i) ret << name(i); } diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 251b10ea89..977cc107e7 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -357,6 +357,7 @@ void QSettingsPrivate::requestUpdate() QStringList QSettingsPrivate::variantListToStringList(const QVariantList &l) { QStringList result; + result.reserve(l.count()); QVariantList::const_iterator it = l.constBegin(); for (; it != l.constEnd(); ++it) result.append(variantToString(*it)); @@ -374,7 +375,9 @@ QVariant QSettingsPrivate::stringListToVariantList(const QStringList &l) outStringList[i].remove(0, 1); } else { QVariantList variantList; - for (int j = 0; j < l.count(); ++j) + const int stringCount = l.count(); + variantList.reserve(stringCount); + for (int j = 0; j < stringCount; ++j) variantList.append(stringToVariant(l.at(j))); return variantList; } diff --git a/src/corelib/io/qurlquery.cpp b/src/corelib/io/qurlquery.cpp index 91e6e21e20..2b695a4f7b 100644 --- a/src/corelib/io/qurlquery.cpp +++ b/src/corelib/io/qurlquery.cpp @@ -642,6 +642,7 @@ QList > QUrlQuery::queryItems(QUrl::ComponentFormattingO QList > result; Map::const_iterator it = d->itemList.constBegin(); Map::const_iterator end = d->itemList.constEnd(); + result.reserve(d->itemList.count()); for ( ; it != end; ++it) result << qMakePair(d->recodeToUser(it->first, encoding), d->recodeToUser(it->second, encoding)); diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 2f3cfc1c0a..90297b9115 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -3222,6 +3222,7 @@ QModelIndexList QAbstractItemModel::persistentIndexList() const { Q_D(const QAbstractItemModel); QModelIndexList result; + result.reserve(d->persistent.indexes.count()); for (QHash::const_iterator it = d->persistent.indexes.constBegin(); it != d->persistent.indexes.constEnd(); ++it) { QPersistentModelIndexData *data = *it; diff --git a/src/corelib/itemmodels/qabstractproxymodel.cpp b/src/corelib/itemmodels/qabstractproxymodel.cpp index 4d08306d28..dbbbbb8ff4 100644 --- a/src/corelib/itemmodels/qabstractproxymodel.cpp +++ b/src/corelib/itemmodels/qabstractproxymodel.cpp @@ -379,6 +379,7 @@ QMimeData* QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const { Q_D(const QAbstractProxyModel); QModelIndexList list; + list.reserve(indexes.count()); foreach(const QModelIndex &index, indexes) list << mapToSource(index); return d->model->mimeData(list); diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp index f773219aeb..f46fd135ca 100644 --- a/src/corelib/itemmodels/qidentityproxymodel.cpp +++ b/src/corelib/itemmodels/qidentityproxymodel.cpp @@ -212,6 +212,7 @@ QItemSelection QIdentityProxyModel::mapSelectionFromSource(const QItemSelection& QItemSelection::const_iterator it = selection.constBegin(); const QItemSelection::const_iterator end = selection.constEnd(); + proxySelection.reserve(selection.count()); for ( ; it != end; ++it) { Q_ASSERT(it->model() == d->model); const QItemSelectionRange range(mapFromSource(it->topLeft()), mapFromSource(it->bottomRight())); @@ -234,6 +235,7 @@ QItemSelection QIdentityProxyModel::mapSelectionToSource(const QItemSelection& s QItemSelection::const_iterator it = selection.constBegin(); const QItemSelection::const_iterator end = selection.constEnd(); + sourceSelection.reserve(selection.count()); for ( ; it != end; ++it) { Q_ASSERT(it->model() == this); const QItemSelectionRange range(mapToSource(it->topLeft()), mapToSource(it->bottomRight())); @@ -269,6 +271,7 @@ QModelIndexList QIdentityProxyModel::match(const QModelIndex& start, int role, c QModelIndexList::const_iterator it = sourceList.constBegin(); const QModelIndexList::const_iterator end = sourceList.constEnd(); QModelIndexList proxyList; + proxyList.reserve(sourceList.count()); for ( ; it != end; ++it) proxyList.append(mapFromSource(*it)); return proxyList; diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp index 922d0f1622..15798d5293 100644 --- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp +++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp @@ -1011,6 +1011,7 @@ QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes() { Q_Q(QSortFilterProxyModel); QModelIndexPairList source_indexes; + source_indexes.reserve(persistent.indexes.count()); foreach (QPersistentModelIndexData *data, persistent.indexes) { QModelIndex proxy_index = data->index; QModelIndex source_index = q->mapToSource(proxy_index); @@ -1030,7 +1031,10 @@ void QSortFilterProxyModelPrivate::update_persistent_indexes( { Q_Q(QSortFilterProxyModel); QModelIndexList from, to; - for (int i = 0; i < source_indexes.count(); ++i) { + const int numSourceIndexes = source_indexes.count(); + from.reserve(numSourceIndexes); + to.reserve(numSourceIndexes); + for (int i = 0; i < numSourceIndexes; ++i) { QModelIndex source_index = source_indexes.at(i).second; QModelIndex old_proxy_index = source_indexes.at(i).first; create_mapping(source_index.parent()); @@ -2013,7 +2017,9 @@ QMimeData *QSortFilterProxyModel::mimeData(const QModelIndexList &indexes) const { Q_D(const QSortFilterProxyModel); QModelIndexList source_indexes; - for (int i = 0; i < indexes.count(); ++i) + const int numIndexes = indexes.count(); + source_indexes.reserve(numIndexes); + for (int i = 0; i < numIndexes; ++i) source_indexes << mapToSource(indexes.at(i)); return d->model->mimeData(source_indexes); } diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp index 2853be3fda..dad736b445 100644 --- a/src/corelib/itemmodels/qstringlistmodel.cpp +++ b/src/corelib/itemmodels/qstringlistmodel.cpp @@ -257,7 +257,9 @@ void QStringListModel::sort(int, Qt::SortOrder order) emit layoutAboutToBeChanged(QList(), VerticalSortHint); QList > list; - for (int i = 0; i < lst.count(); ++i) + const int lstCount = lst.count(); + list.reserve(lstCount); + for (int i = 0; i < lstCount; ++i) list.append(QPair(lst.at(i), i)); if (order == Qt::AscendingOrder) diff --git a/src/corelib/json/qjsonarray.cpp b/src/corelib/json/qjsonarray.cpp index 77a3d0a2b8..dd27603d6d 100644 --- a/src/corelib/json/qjsonarray.cpp +++ b/src/corelib/json/qjsonarray.cpp @@ -271,6 +271,7 @@ QVariantList QJsonArray::toVariantList() const QVariantList list; if (a) { + list.reserve(a->length); for (int i = 0; i < (int)a->length; ++i) list.append(QJsonValue(d, a, a->at(i)).toVariant()); } diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/json/qjsonobject.cpp index ae44cd9ff9..b7dfe88434 100644 --- a/src/corelib/json/qjsonobject.cpp +++ b/src/corelib/json/qjsonobject.cpp @@ -274,7 +274,7 @@ QStringList QJsonObject::keys() const return QStringList(); QStringList keys; - + keys.reserve(o->length); for (uint i = 0; i < o->length; ++i) { QJsonPrivate::Entry *e = o->entryAt(i); keys.append(e->key()); diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp index 3e9cdac966..93788afeae 100644 --- a/src/corelib/kernel/qmimedata.cpp +++ b/src/corelib/kernel/qmimedata.cpp @@ -354,7 +354,9 @@ void QMimeData::setUrls(const QList &urls) { Q_D(QMimeData); QList list; - for (int i = 0; i < urls.size(); ++i) + const int numUrls = urls.size(); + list.reserve(numUrls); + for (int i = 0; i < numUrls; ++i) list.append(urls.at(i)); d->setData(QLatin1String("text/uri-list"), list); diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index bec7a79e8f..133933f9af 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -434,6 +434,7 @@ QList QMimeDatabase::mimeTypesForFileName(const QString &fileName) co QStringList matches = d->mimeTypeForFileName(fileName); QList mimes; matches.sort(); // Make it deterministic + mimes.reserve(matches.count()); foreach (const QString &mime, matches) mimes.append(d->mimeTypeForName(mime)); return mimes; diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index 7342a5cd77..dd8f385c82 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -541,6 +541,7 @@ QList QMimeBinaryProvider::allMimeTypes() { QList result; loadMimeTypeList(); + result.reserve(m_mimetypeNames.count()); for (QSet::const_iterator it = m_mimetypeNames.constBegin(); it != m_mimetypeNames.constEnd(); ++it) diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index 2756414d70..292ad30525 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -435,7 +435,9 @@ QObjectList QPluginLoader::staticInstances() QObjectList instances; const StaticPluginList *plugins = staticPluginList(); if (plugins) { - for (int i = 0; i < plugins->size(); ++i) + const int numPlugins = plugins->size(); + instances.reserve(numPlugins); + for (int i = 0; i < numPlugins; ++i) instances += plugins->at(i).instance(); } return instances; diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index 3a1a852ef5..ad34e54d2c 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -2454,6 +2454,7 @@ void QStateMachinePrivate::handleTransitionSignal(QObject *sender, int signalInd QMetaMethod method = meta->method(signalIndex); int argc = method.parameterCount(); QList vargs; + vargs.reserve(argc); for (int i = 0; i < argc; ++i) { int type = method.parameterType(i); vargs.append(QVariant(type, argv[i+1])); diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp index 47cad6349c..88a048d826 100644 --- a/src/corelib/tools/qregularexpression.cpp +++ b/src/corelib/tools/qregularexpression.cpp @@ -2128,7 +2128,8 @@ QStringRef QRegularExpressionMatch::capturedRef(const QString &name) const QStringList QRegularExpressionMatch::capturedTexts() const { QStringList texts; - for (int i = 0; i <= lastCapturedIndex(); ++i) + texts.reserve(d->capturedCount); + for (int i = 0; i < d->capturedCount; ++i) texts << captured(i); return texts; } diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp index 8e6a0a0578..5bc3610af0 100644 --- a/src/corelib/tools/qtimezoneprivate.cpp +++ b/src/corelib/tools/qtimezoneprivate.cpp @@ -700,6 +700,7 @@ QByteArray QUtcTimeZonePrivate::systemTimeZoneId() const QList QUtcTimeZonePrivate::availableTimeZoneIds() const { QList result; + result.reserve(utcDataTableSize); for (int i = 0; i < utcDataTableSize; ++i) result << utcId(utcData(i)); std::sort(result.begin(), result.end()); // ### or already sorted?? -- cgit v1.2.3