From 09e926cc278d8572bfd107424af2d4d482ac73ae Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Tue, 25 Sep 2018 21:49:05 +0300 Subject: Use a std::vector instead of a QVector in QMimeDatabasePrivate Using std::vector saves a bit c++ code when using range-for loop over the vector. Besides, no shared copies created anymore which is a bit faster. Change-Id: I564306ed9ac907e9f32f59b33ed15c027a59b4eb Reviewed-by: David Faure --- src/corelib/mimetypes/qmimedatabase.cpp | 39 +++++++++++++-------------------- src/corelib/mimetypes/qmimedatabase_p.h | 5 +++-- 2 files changed, 18 insertions(+), 26 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index 10b5c8eafd..9407b9ced8 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -109,8 +109,8 @@ void QMimeDatabasePrivate::loadProviders() mimeDirs.prepend(QLatin1String(":/qt-project.org/qmime")); //qDebug() << "mime dirs:" << mimeDirs; - QVector currentProviders = m_providers; - m_providers.clear(); + Providers currentProviders; + std::swap(m_providers, currentProviders); m_providers.reserve(mimeDirs.size()); for (const QString &mimeDir : qAsConst(mimeDirs)) { const QString cacheFile = mimeDir + QStringLiteral("/mime.cache"); @@ -133,7 +133,7 @@ void QMimeDatabasePrivate::loadProviders() provider = new QMimeXMLProvider(this, mimeDir); //qDebug() << "Created XML provider for" << mimeDir; } - m_providers.append(provider); + m_providers.push_back(provider); } else { QMimeProviderBase *provider = *it; currentProviders.erase(it); @@ -143,18 +143,18 @@ void QMimeDatabasePrivate::loadProviders() provider = new QMimeXMLProvider(this, mimeDir); //qDebug() << "Created XML provider to replace binary provider for" << mimeDir; } - m_providers.append(provider); + m_providers.push_back(provider); } } qDeleteAll(currentProviders); } -QVector QMimeDatabasePrivate::providers() +const QMimeDatabasePrivate::Providers &QMimeDatabasePrivate::providers() { #ifndef Q_OS_WASM // stub implementation always returns true Q_ASSERT(!mutex.tryLock()); // caller should have locked mutex #endif - if (m_providers.isEmpty()) { + if (m_providers.empty()) { loadProviders(); m_lastCheck.start(); } else { @@ -166,8 +166,7 @@ QVector QMimeDatabasePrivate::providers() QString QMimeDatabasePrivate::resolveAlias(const QString &nameOrAlias) { - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) { + for (const auto &provider : providers()) { const QString ret = provider->resolveAlias(nameOrAlias); if (!ret.isEmpty()) return ret; @@ -181,9 +180,8 @@ QString QMimeDatabasePrivate::resolveAlias(const QString &nameOrAlias) */ QMimeType QMimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias) { - const auto allProviders = providers(); const QString mimeName = resolveAlias(nameOrAlias); - for (QMimeProviderBase *provider : allProviders) { + for (const auto &provider : providers()) { const QMimeType mime = provider->mimeTypeForName(mimeName); if (mime.isValid()) return mime; @@ -207,8 +205,7 @@ QMimeGlobMatchResult QMimeDatabasePrivate::findByFileName(const QString &fileNam { QMimeGlobMatchResult result; // TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly. - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) + for (const auto &provider : providers()) provider->addFileNameMatches(fileName, result); return result; } @@ -229,8 +226,7 @@ void QMimeDatabasePrivate::loadGenericIcon(QMimeTypePrivate &mimePrivate) QMutexLocker locker(&mutex); if (mimePrivate.fromCache) { mimePrivate.genericIconName.clear(); - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) { + for (const auto &provider : providers()) { provider->loadGenericIcon(mimePrivate); if (!mimePrivate.genericIconName.isEmpty()) break; @@ -243,8 +239,7 @@ void QMimeDatabasePrivate::loadIcon(QMimeTypePrivate &mimePrivate) QMutexLocker locker(&mutex); if (mimePrivate.fromCache) { mimePrivate.iconName.clear(); - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) { + for (const auto &provider : providers()) { provider->loadIcon(mimePrivate); if (!mimePrivate.iconName.isEmpty()) break; @@ -278,8 +273,7 @@ QStringList QMimeDatabasePrivate::parents(const QString &mimeName) { Q_ASSERT(!mutex.tryLock()); QStringList result; - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) + for (const auto &provider : providers()) provider->addParents(mimeName, result); if (result.isEmpty()) { const QString parent = fallbackParent(mimeName); @@ -293,8 +287,7 @@ QStringList QMimeDatabasePrivate::listAliases(const QString &mimeName) { QMutexLocker locker(&mutex); QStringList result; - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) + for (const auto &provider : providers()) provider->addAliases(mimeName, result); return result; } @@ -333,8 +326,7 @@ QMimeType QMimeDatabasePrivate::findByData(const QByteArray &data, int *accuracy *accuracyPtr = 0; QMimeType candidate; - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) + for (const auto &provider : providers()) provider->findByMagic(data, accuracyPtr, candidate); if (candidate.isValid()) @@ -416,8 +408,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa QList QMimeDatabasePrivate::allMimeTypes() { QList result; - const auto allProviders = providers(); - for (QMimeProviderBase *provider : allProviders) + for (const auto &provider : providers()) provider->addAllMimeTypes(result); return result; } diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h index 1c38f46115..4260718af6 100644 --- a/src/corelib/mimetypes/qmimedatabase_p.h +++ b/src/corelib/mimetypes/qmimedatabase_p.h @@ -102,11 +102,12 @@ public: bool mimeInherits(const QString &mime, const QString &parent); private: - QVector providers(); + using Providers = std::vector; + const Providers &providers(); bool shouldCheck(); void loadProviders(); - mutable QVector m_providers; + mutable Providers m_providers; QElapsedTimer m_lastCheck; public: -- cgit v1.2.3