QtCore: eradicate all Q_FOREACH loops [mimetypes]

Saves just shy of 6KiB in text size on optimized GCC 4.9 Linux
AMD64 builds, iow: ~0.1% of the total QtCore library size.

Change-Id: I087e1e34a64944affb1211e16371e314012c4b2c
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2015-12-23 00:15:30 +01:00
parent fd7861ac4b
commit 0ff221f522
5 changed files with 24 additions and 25 deletions

View File

@ -187,7 +187,7 @@ QMimeType QMimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileNa
// "for glob_match in glob_matches:" // "for glob_match in glob_matches:"
// "if glob_match is subclass or equal to sniffed_type, use glob_match" // "if glob_match is subclass or equal to sniffed_type, use glob_match"
const QString sniffedMime = candidateByData.name(); const QString sniffedMime = candidateByData.name();
foreach (const QString &m, candidatesByName) { for (const QString &m : qAsConst(candidatesByName)) {
if (inherits(m, sniffedMime)) { if (inherits(m, sniffedMime)) {
// We have magic + pattern pointing to this, so it's a pretty good match // We have magic + pattern pointing to this, so it's a pretty good match
*accuracyPtr = 100; *accuracyPtr = 100;
@ -224,7 +224,8 @@ bool QMimeDatabasePrivate::inherits(const QString &mime, const QString &parent)
const QString current = toCheck.pop(); const QString current = toCheck.pop();
if (current == resolvedParent) if (current == resolvedParent)
return true; return true;
foreach (const QString &par, provider()->parents(current)) const auto parents = provider()->parents(current);
for (const QString &par : parents)
toCheck.push(par); toCheck.push(par);
} }
return false; return false;
@ -431,10 +432,10 @@ QList<QMimeType> QMimeDatabase::mimeTypesForFileName(const QString &fileName) co
{ {
QMutexLocker locker(&d->mutex); QMutexLocker locker(&d->mutex);
QStringList matches = d->mimeTypeForFileName(fileName); const QStringList matches = d->mimeTypeForFileName(fileName);
QList<QMimeType> mimes; QList<QMimeType> mimes;
mimes.reserve(matches.count()); mimes.reserve(matches.count());
foreach (const QString &mime, matches) for (const QString &mime : matches)
mimes.append(d->mimeTypeForName(mime)); mimes.append(d->mimeTypeForName(mime));
return mimes; return mimes;
} }

View File

@ -213,9 +213,8 @@ QStringList QMimeAllGlobPatterns::matchingGlobs(const QString &fileName, QString
// (toLower because fast patterns are always case-insensitive and saved as lowercase) // (toLower because fast patterns are always case-insensitive and saved as lowercase)
const QStringList matchingMimeTypes = m_fastPatterns.value(simpleExtension); const QStringList matchingMimeTypes = m_fastPatterns.value(simpleExtension);
foreach (const QString &mime, matchingMimeTypes) { for (const QString &mime : matchingMimeTypes)
result.addMatch(mime, 50, QLatin1String("*.") + simpleExtension); result.addMatch(mime, 50, QLatin1String("*.") + simpleExtension);
}
// Can't return yet; *.tar.bz2 has to win over *.bz2, so we need the low-weight mimetypes anyway, // Can't return yet; *.tar.bz2 has to win over *.bz2, so we need the low-weight mimetypes anyway,
// at least those with weight 50. // at least those with weight 50.
} }

View File

@ -85,7 +85,7 @@ QList<QMimeMagicRule> QMimeMagicRuleMatcher::magicRules() const
// Check for a match on contents of a file // Check for a match on contents of a file
bool QMimeMagicRuleMatcher::matches(const QByteArray &data) const bool QMimeMagicRuleMatcher::matches(const QByteArray &data) const
{ {
foreach (const QMimeMagicRule &magicRule, m_list) { for (const QMimeMagicRule &magicRule : m_list) {
if (magicRule.matches(data)) if (magicRule.matches(data))
return true; return true;
} }

View File

@ -242,7 +242,7 @@ void QMimeBinaryProvider::checkCache()
// Then check if new cache files appeared // Then check if new cache files appeared
const QStringList cacheFileNames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/mime.cache")); const QStringList cacheFileNames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/mime.cache"));
if (cacheFileNames != m_cacheFileNames) { if (cacheFileNames != m_cacheFileNames) {
foreach (const QString &cacheFileName, cacheFileNames) { for (const QString &cacheFileName : cacheFileNames) {
CacheFile *cacheFile = m_cacheFiles.findCacheFile(cacheFileName); CacheFile *cacheFile = m_cacheFiles.findCacheFile(cacheFileName);
if (!cacheFile) { if (!cacheFile) {
//qDebug() << "new file:" << cacheFileName; //qDebug() << "new file:" << cacheFileName;
@ -287,7 +287,7 @@ QStringList QMimeBinaryProvider::findByFileName(const QString &fileName, QString
const QString lowerFileName = fileName.toLower(); const QString lowerFileName = fileName.toLower();
QMimeGlobMatchResult result; QMimeGlobMatchResult result;
// TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly. // TODO this parses in the order (local, global). Check that it handles "NOGLOBS" correctly.
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName); matchGlobList(result, cacheFile, cacheFile->getUint32(PosLiteralListOffset), fileName);
matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName); matchGlobList(result, cacheFile, cacheFile->getUint32(PosGlobListOffset), fileName);
const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset); const int reverseSuffixTreeOffset = cacheFile->getUint32(PosReverseSuffixTreeOffset);
@ -399,7 +399,7 @@ bool QMimeBinaryProvider::matchMagicRule(QMimeBinaryProvider::CacheFile *cacheFi
QMimeType QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr) QMimeType QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr)
{ {
checkCache(); checkCache();
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const int magicListOffset = cacheFile->getUint32(PosMagicListOffset); const int magicListOffset = cacheFile->getUint32(PosMagicListOffset);
const int numMatches = cacheFile->getUint32(magicListOffset); const int numMatches = cacheFile->getUint32(magicListOffset);
//const int maxExtent = cacheFile->getUint32(magicListOffset + 4); //const int maxExtent = cacheFile->getUint32(magicListOffset + 4);
@ -427,7 +427,7 @@ QStringList QMimeBinaryProvider::parents(const QString &mime)
checkCache(); checkCache();
const QByteArray mimeStr = mime.toLatin1(); const QByteArray mimeStr = mime.toLatin1();
QStringList result; QStringList result;
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const int parentListOffset = cacheFile->getUint32(PosParentListOffset); const int parentListOffset = cacheFile->getUint32(PosParentListOffset);
const int numEntries = cacheFile->getUint32(parentListOffset); const int numEntries = cacheFile->getUint32(parentListOffset);
@ -467,7 +467,7 @@ QString QMimeBinaryProvider::resolveAlias(const QString &name)
{ {
checkCache(); checkCache();
const QByteArray input = name.toLatin1(); const QByteArray input = name.toLatin1();
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset); const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset);
const int numEntries = cacheFile->getUint32(aliasListOffset); const int numEntries = cacheFile->getUint32(aliasListOffset);
int begin = 0; int begin = 0;
@ -498,7 +498,7 @@ QStringList QMimeBinaryProvider::listAliases(const QString &name)
checkCache(); checkCache();
QStringList result; QStringList result;
const QByteArray input = name.toLatin1(); const QByteArray input = name.toLatin1();
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset); const int aliasListOffset = cacheFile->getUint32(PosAliasListOffset);
const int numEntries = cacheFile->getUint32(aliasListOffset); const int numEntries = cacheFile->getUint32(aliasListOffset);
for (int pos = 0; pos < numEntries; ++pos) { for (int pos = 0; pos < numEntries; ++pos) {
@ -524,7 +524,7 @@ void QMimeBinaryProvider::loadMimeTypeList()
// Unfortunately mime.cache doesn't have a full list of all mimetypes. // Unfortunately mime.cache doesn't have a full list of all mimetypes.
// So we have to parse the plain-text files called "types". // So we have to parse the plain-text files called "types".
const QStringList typesFilenames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/types")); const QStringList typesFilenames = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/types"));
foreach (const QString &typeFilename, typesFilenames) { for (const QString &typeFilename : typesFilenames) {
QFile file(typeFilename); QFile file(typeFilename);
if (file.open(QIODevice::ReadOnly)) { if (file.open(QIODevice::ReadOnly)) {
while (!file.atEnd()) { while (!file.atEnd()) {
@ -677,7 +677,7 @@ void QMimeBinaryProvider::loadIcon(QMimeTypePrivate &data)
{ {
checkCache(); checkCache();
const QByteArray inputMime = data.name.toLatin1(); const QByteArray inputMime = data.name.toLatin1();
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const QString icon = iconForMime(cacheFile, PosIconsListOffset, inputMime); const QString icon = iconForMime(cacheFile, PosIconsListOffset, inputMime);
if (!icon.isEmpty()) { if (!icon.isEmpty()) {
data.iconName = icon; data.iconName = icon;
@ -690,7 +690,7 @@ void QMimeBinaryProvider::loadGenericIcon(QMimeTypePrivate &data)
{ {
checkCache(); checkCache();
const QByteArray inputMime = data.name.toLatin1(); const QByteArray inputMime = data.name.toLatin1();
foreach (CacheFile *cacheFile, m_cacheFiles) { for (CacheFile *cacheFile : qAsConst(m_cacheFiles)) {
const QString icon = iconForMime(cacheFile, PosGenericIconsListOffset, inputMime); const QString icon = iconForMime(cacheFile, PosGenericIconsListOffset, inputMime);
if (!icon.isEmpty()) { if (!icon.isEmpty()) {
data.genericIconName = icon; data.genericIconName = icon;
@ -733,7 +733,7 @@ QMimeType QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr
QString candidate; QString candidate;
foreach (const QMimeMagicRuleMatcher &matcher, m_magicMatchers) { for (const QMimeMagicRuleMatcher &matcher : qAsConst(m_magicMatchers)) {
if (matcher.matches(data)) { if (matcher.matches(data)) {
const int priority = matcher.priority(); const int priority = matcher.priority();
if (priority > *accuracyPtr) { if (priority > *accuracyPtr) {
@ -753,7 +753,7 @@ void QMimeXMLProvider::ensureLoaded()
const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory); const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory);
//qDebug() << "packageDirs=" << packageDirs; //qDebug() << "packageDirs=" << packageDirs;
foreach (const QString &packageDir, packageDirs) { for (const QString &packageDir : packageDirs) {
QDir dir(packageDir); QDir dir(packageDir);
const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
//qDebug() << static_cast<const void *>(this) << packageDir << files; //qDebug() << static_cast<const void *>(this) << packageDir << files;
@ -782,7 +782,7 @@ void QMimeXMLProvider::ensureLoaded()
//qDebug() << "Loading" << m_allFiles; //qDebug() << "Loading" << m_allFiles;
foreach (const QString &file, allFiles) for (const QString &file : qAsConst(allFiles))
load(file); load(file);
} }
} }

View File

@ -241,7 +241,7 @@ QString QMimeType::comment() const
QStringList languageList; QStringList languageList;
languageList << QLocale::system().name(); languageList << QLocale::system().name();
languageList << QLocale::system().uiLanguages(); languageList << QLocale::system().uiLanguages();
Q_FOREACH (const QString &language, languageList) { for (const QString &language : qAsConst(languageList)) {
const QString lang = language == QLatin1String("C") ? QLatin1String("en_US") : language; const QString lang = language == QLatin1String("C") ? QLatin1String("en_US") : language;
const QString comm = d->localeComments.value(lang); const QString comm = d->localeComments.value(lang);
if (!comm.isEmpty()) if (!comm.isEmpty())
@ -337,17 +337,16 @@ QStringList QMimeType::parentMimeTypes() const
static void collectParentMimeTypes(const QString &mime, QStringList &allParents) static void collectParentMimeTypes(const QString &mime, QStringList &allParents)
{ {
QStringList parents = QMimeDatabasePrivate::instance()->provider()->parents(mime); const QStringList parents = QMimeDatabasePrivate::instance()->provider()->parents(mime);
foreach (const QString &parent, parents) { for (const QString &parent : parents) {
// I would use QSet, but since order matters I better not // I would use QSet, but since order matters I better not
if (!allParents.contains(parent)) if (!allParents.contains(parent))
allParents.append(parent); allParents.append(parent);
} }
// We want a breadth-first search, so that the least-specific parent (octet-stream) is last // We want a breadth-first search, so that the least-specific parent (octet-stream) is last
// This means iterating twice, unfortunately. // This means iterating twice, unfortunately.
foreach (const QString &parent, parents) { for (const QString &parent : parents)
collectParentMimeTypes(parent, allParents); collectParentMimeTypes(parent, allParents);
}
} }
/*! /*!
@ -392,7 +391,7 @@ QStringList QMimeType::suffixes() const
QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d); QMimeDatabasePrivate::instance()->provider()->loadMimeTypePrivate(*d);
QStringList result; QStringList result;
foreach (const QString &pattern, d->globPatterns) { for (const QString &pattern : qAsConst(d->globPatterns)) {
// Not a simple suffix if it looks like: README or *. or *.* or *.JP*G or *.JP? // Not a simple suffix if it looks like: README or *. or *.* or *.JP*G or *.JP?
if (pattern.startsWith(QLatin1String("*.")) && if (pattern.startsWith(QLatin1String("*.")) &&
pattern.length() > 2 && pattern.length() > 2 &&