diff options
author | Marc Mutz <marc.mutz@qt.io> | 2024-02-07 11:06:26 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2024-02-09 11:39:27 +0000 |
commit | e3cc87c5f49d9bf824d6e667bf3b206470cf3b2d (patch) | |
tree | a9c85b84114483aa824a40b1aafd7de9ac018b5f /src/corelib/mimetypes/qmimeprovider.cpp | |
parent | 38c62c58514d574f44caf799e5568a2e9eebffeb (diff) |
QMimeBinaryProvider: cut out the QMap middle-man
In Qt 6, QMap is just a shared pointer to a std::map.
QMimeBinaryProvider::m_mimetypeExtra is never copied, though, so the
implicit sharing that QMap adds on top of std::map is useless.
Use the underlying std::map directly.
Yes, the std::map API is a bit raw around the edges (std::pair
value_type), but we're professionals here.
Saves more than 1.7KiB in TEXT size on optimized AMD64 GCC 11 C++20
Linux builds.
As a drive-by, cut out the insertIt temporary, too, and assign
directly to `it`.
Change-Id: If3fd98a7e7017909d00b8725f8c252b19459d5b6
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'src/corelib/mimetypes/qmimeprovider.cpp')
-rw-r--r-- | src/corelib/mimetypes/qmimeprovider.cpp | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index 3aa21d1eeb..458cd46385 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -9,7 +9,6 @@ #include <qstandardpaths.h> #include "qmimemagicrulematcher_p.h" -#include <QMap> #include <QXmlStreamReader> #include <QBuffer> #include <QDir> @@ -488,30 +487,24 @@ void QMimeBinaryProvider::addAllMimeTypes(QList<QMimeType> &result) QMimeTypePrivate::LocaleHash QMimeBinaryProvider::localeComments(const QString &name) { MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name); - if (it != m_mimetypeExtra.constEnd()) { - const MimeTypeExtra &e = it.value(); - return e.localeComments; - } + if (it != m_mimetypeExtra.cend()) + return it->second.localeComments; return {}; } bool QMimeBinaryProvider::hasGlobDeleteAll(const QString &name) { MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name); - if (it != m_mimetypeExtra.constEnd()) { - const MimeTypeExtra &e = it.value(); - return e.hasGlobDeleteAll; - } + if (it != m_mimetypeExtra.cend()) + return it->second.hasGlobDeleteAll; return {}; } QStringList QMimeBinaryProvider::globPatterns(const QString &name) { MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name); - if (it != m_mimetypeExtra.constEnd()) { - const MimeTypeExtra &e = it.value(); - return e.globPatterns; - } + if (it != m_mimetypeExtra.cend()) + return it->second.globPatterns; return {}; } @@ -519,8 +512,8 @@ QMimeBinaryProvider::MimeTypeExtraMap::const_iterator QMimeBinaryProvider::loadMimeTypeExtra(const QString &mimeName) { #if QT_CONFIG(xmlstreamreader) - auto it = m_mimetypeExtra.constFind(mimeName); - if (it == m_mimetypeExtra.constEnd()) { + auto it = m_mimetypeExtra.find(mimeName); + if (it == m_mimetypeExtra.cend()) { // load comment and globPatterns // shared-mime-info since 1.3 lowercases the xml files @@ -530,21 +523,20 @@ QMimeBinaryProvider::loadMimeTypeExtra(const QString &mimeName) QFile qfile(mimeFile); if (!qfile.open(QFile::ReadOnly)) - return m_mimetypeExtra.constEnd(); + return m_mimetypeExtra.cend(); - auto insertIt = m_mimetypeExtra.insert(mimeName, MimeTypeExtra{}); - it = insertIt; - MimeTypeExtra &extra = insertIt.value(); + it = m_mimetypeExtra.try_emplace(mimeName).first; + MimeTypeExtra &extra = it->second; QString mainPattern; QXmlStreamReader xml(&qfile); if (xml.readNextStartElement()) { if (xml.name() != "mime-type"_L1) { - return m_mimetypeExtra.constEnd(); + return m_mimetypeExtra.cend(); } const auto name = xml.attributes().value("type"_L1); if (name.isEmpty()) - return m_mimetypeExtra.constEnd(); + return m_mimetypeExtra.cend(); if (name.compare(mimeName, Qt::CaseInsensitive)) qWarning() << "Got name" << name << "in file" << mimeFile << "expected" << mimeName; @@ -585,7 +577,7 @@ QMimeBinaryProvider::loadMimeTypeExtra(const QString &mimeName) #else Q_UNUSED(mimeName); qWarning("Cannot load mime type since QXmlStreamReader is not available."); - return m_mimetypeExtra.constEnd(); + return m_mimetypeExtra.cend(); #endif // feature xmlstreamreader } |