Merge pull request #8558 from luis-pereira/containter-anti-pattern

Don't create temporary containers just to iterate over them
This commit is contained in:
Vladimir Golovnev
2018-03-19 13:06:01 +03:00
committed by GitHub
14 changed files with 120 additions and 61 deletions

View File

@@ -91,7 +91,7 @@ void AppController::preferencesAction()
data["incomplete_files_ext"] = session->isAppendExtensionEnabled();
const QVariantHash dirs = pref->getScanDirs();
QVariantMap nativeDirs;
for (QVariantHash::const_iterator i = dirs.begin(), e = dirs.end(); i != e; ++i) {
for (QVariantHash::const_iterator i = dirs.cbegin(), e = dirs.cend(); i != e; ++i) {
if (i.value().type() == QVariant::Int)
nativeDirs.insert(Utils::Fs::toNativePath(i.key()), i.value().toInt());
else
@@ -246,7 +246,7 @@ void AppController::setPreferencesAction()
QVariantHash oldScanDirs = pref->getScanDirs();
QVariantHash scanDirs;
ScanFoldersModel *model = ScanFoldersModel::instance();
for (QVariantMap::const_iterator i = nativeDirs.begin(), e = nativeDirs.end(); i != e; ++i) {
for (QVariantMap::const_iterator i = nativeDirs.cbegin(), e = nativeDirs.cend(); i != e; ++i) {
QString folder = Utils::Fs::fromNativePath(i.key());
int downloadType;
QString downloadPath;
@@ -275,8 +275,8 @@ void AppController::setPreferencesAction()
}
// Update deleted folders
foreach (QVariant folderVariant, oldScanDirs.keys()) {
QString folder = folderVariant.toString();
for (auto i = oldScanDirs.cbegin(); i != oldScanDirs.cend(); ++i) {
QString folder = i.key();
if (!scanDirs.contains(folder)) {
model->removePath(folder);
qDebug("Removed watched folder %s", qUtf8Printable(folder));

View File

@@ -152,20 +152,22 @@ namespace
syncData.clear();
QVariantList removedItems;
foreach (QString key, data.keys()) {
for (auto i = data.cbegin(); i != data.cend(); ++i) {
const QString &key = i.key();
const QVariant &value = i.value();
removedItems.clear();
switch (static_cast<QMetaType::Type>(data[key].type())) {
switch (static_cast<QMetaType::Type>(value.type())) {
case QMetaType::QVariantMap: {
QVariantMap map;
processMap(prevData[key].toMap(), data[key].toMap(), map);
processMap(prevData[key].toMap(), value.toMap(), map);
if (!map.isEmpty())
syncData[key] = map;
}
break;
case QMetaType::QVariantHash: {
QVariantMap map;
processHash(prevData[key].toHash(), data[key].toHash(), map, removedItems);
processHash(prevData[key].toHash(), value.toHash(), map, removedItems);
if (!map.isEmpty())
syncData[key] = map;
if (!removedItems.isEmpty())
@@ -174,7 +176,7 @@ namespace
break;
case QMetaType::QVariantList: {
QVariantList list;
processList(prevData[key].toList(), data[key].toList(), list, removedItems);
processList(prevData[key].toList(), value.toList(), list, removedItems);
if (!list.isEmpty())
syncData[key] = list;
if (!removedItems.isEmpty())
@@ -190,13 +192,13 @@ namespace
case QMetaType::ULongLong:
case QMetaType::UInt:
case QMetaType::QDateTime:
if (prevData[key] != data[key])
syncData[key] = data[key];
if (prevData[key] != value)
syncData[key] = value;
break;
default:
Q_ASSERT_X(false, "processMap"
, QString("Unexpected type: %1")
.arg(QMetaType::typeName(static_cast<QMetaType::Type>(data[key].type())))
.arg(QMetaType::typeName(static_cast<QMetaType::Type>(value.type())))
.toUtf8().constData());
}
}
@@ -213,25 +215,25 @@ namespace
if (prevData.isEmpty()) {
// If list was empty before, then difference is a whole new list.
foreach (QString key, data.keys())
syncData[key] = data[key];
for (auto i = data.cbegin(); i != data.cend(); ++i)
syncData[i.key()] = i.value();
}
else {
foreach (QString key, data.keys()) {
switch (data[key].type()) {
for (auto i = data.cbegin(); i != data.cend(); ++i) {
switch (i.value().type()) {
case QVariant::Map:
if (!prevData.contains(key)) {
if (!prevData.contains(i.key())) {
// new list item found - append it to syncData
syncData[key] = data[key];
syncData[i.key()] = i.value();
}
else {
QVariantMap map;
processMap(prevData[key].toMap(), data[key].toMap(), map);
processMap(prevData[i.key()].toMap(), i.value().toMap(), map);
// existing list item found - remove it from prevData
prevData.remove(key);
prevData.remove(i.key());
if (!map.isEmpty())
// changed list item found - append its changes to syncData
syncData[key] = map;
syncData[i.key()] = map;
}
break;
default:
@@ -242,8 +244,8 @@ namespace
if (!prevData.isEmpty()) {
// prevData contains only items that are missing now -
// put them in removedItems
foreach (QString s, prevData.keys())
removedItems << s;
for (auto i = prevData.cbegin(); i != prevData.cend(); ++i)
removedItems << i.key();
}
}
}
@@ -395,8 +397,8 @@ void SyncController::maindataAction()
data["torrents"] = torrents;
QVariantList categories;
foreach (const QString &category, session->categories().keys())
categories << category;
for (auto i = session->categories().cbegin(); i != session->categories().cend(); ++i)
categories << i.key();
data["categories"] = categories;