Skip to content

Commit 1cfca7c

Browse files
refactor: drop foreach/Q_FOREACH
Use C++11 range for. Making the container const or using qAsConst() to cast to const, so that container detachments are avoided. Enforce it by adding QT_NO_FOREACH to the compilation definitions. Rationale: * Since Qt 5.7, the use of this macro is discouraged. It will be removed in a future version of Qt. * It only works efficiently on (some) Qt containers; it performs prohibitively expensive on all std containers, QVarLengthArray, and doesn’t work at all for C arrays. * Even where it works as advertised, it typically costs ~100 bytes of text size more per loop than the C++11 ranged for-loop. * Its unconditionally taking a copy of the container makes it hard to reason about the loop. [1]: https://www.kdab.com/goodbye-q_foreach/
1 parent 09d58f1 commit 1cfca7c

File tree

3 files changed

+13
-19
lines changed

3 files changed

+13
-19
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ else()
6565
set(QT_MAJOR_VERSION 5)
6666
endif()
6767

68+
add_definitions(-DQT_NO_FOREACH)
69+
6870
find_package(${LEMON_QT_LIBNAME} ${LEMON_QT_MAJOR_VERSION}.${LEMON_QT_MINOR_VERSION} COMPONENTS Core Gui Widgets REQUIRED)
6971
list(APPEND LEMON_QT_LIBS ${LEMON_QT_LIBNAME}::Core ${LEMON_QT_LIBNAME}::Gui ${LEMON_QT_LIBNAME}::Widgets)
7072

makespec/BUILDVERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
94
1+
96

src/lemon.cpp

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,8 @@ void removePath(const QString &path) {
261261
return;
262262

263263
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
264-
QFileInfoList fileList = dir.entryInfoList();
265264

266-
foreach (QFileInfo fi, fileList) {
265+
for (const auto &fi : dir.entryInfoList()) {
267266
if (fi.isFile() || fi.isSymLink())
268267
fi.dir().remove(fi.fileName());
269268
else
@@ -282,9 +281,8 @@ void copyPath(const QString &fromPath, const QString &toPath) {
282281
QString fpath = fromPath + QDir::separator();
283282
QString tpath = toPath + QDir::separator();
284283
dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
285-
QFileInfoList fileList = dir.entryInfoList();
286284

287-
foreach (QFileInfo fi, fileList) {
285+
for (const auto &fi : dir.entryInfoList()) {
288286
QString fn = fpath + fi.fileName();
289287
QString tn = tpath + fi.fileName();
290288

@@ -354,9 +352,8 @@ void LemonLime::cleanupButtonClicked() {
354352
bkProcess->setValue(0);
355353
QCoreApplication::processEvents();
356354
basDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
357-
basDirLis = basDir.entryInfoList();
358355

359-
foreach (QFileInfo conDirWho, basDirLis) {
356+
for (const auto &conDirWho : basDir.entryInfoList()) {
360357
bkLoca.mkpath(conDirWho.fileName());
361358
copyPath(conDirWho.path() + QDir::separator() + conDirWho.fileName(),
362359
bkLoca.path() + QDir::separator() + conDirWho.fileName());
@@ -421,27 +418,24 @@ void LemonLime::cleanupButtonClicked() {
421418
process->setLabelText(tr("Now Cleaning..."));
422419
QCoreApplication::processEvents();
423420
basDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
424-
basDirLis = basDir.entryInfoList();
425421

426-
foreach (QFileInfo conDirWho, basDirLis) {
422+
for (const auto &conDirWho : basDir.entryInfoList()) {
427423
QDir conDir(conDirWho.filePath());
428424
conDir.setFilter(QDir::Files | QDir::Hidden);
429-
QFileInfoList conDirLis = conDir.entryInfoList();
430425

431-
foreach (QFileInfo proFilWho, conDirLis) {
426+
for (const auto &proFilWho : conDir.entryInfoList()) {
432427
if (proFilWho.suffix().length() <= 0 || proFilWho.suffix().toUpper() == "EXE")
433428
QFile::remove(proFilWho.absoluteFilePath());
434429
}
435430

436431
conDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
437-
conDirLis = conDir.entryInfoList();
438432

439-
foreach (QFileInfo proDirWho, conDirLis) {
433+
for (const auto &proDirWho : conDir.entryInfoList()) {
440434
if (nameSet.contains(proDirWho.fileName())) {
441435
QDir proDir(proDirWho.filePath());
442436
proDir.setFilter(QDir::Files | QDir::Hidden);
443437

444-
foreach (QFileInfo sorFilWho, proDir.entryInfoList()) {
438+
for (const auto &sorFilWho : proDir.entryInfoList()) {
445439
if (sorFilWho.suffix().length() > 0 && sorFilWho.suffix().toUpper() != "EXE")
446440
QFile::copy(sorFilWho.filePath(),
447441
conDirWho.filePath() + QDir::separator() + sorFilWho.fileName());
@@ -456,9 +450,8 @@ void LemonLime::cleanupButtonClicked() {
456450
}
457451

458452
conDir.setFilter(QDir::Files | QDir::Hidden);
459-
conDirLis = conDir.entryInfoList();
460453

461-
foreach (QFileInfo proFilWho, conDirLis) {
454+
for (const auto &proFilWho : conDir.entryInfoList()) {
462455
QString proFilName = proFilWho.fileName();
463456
QString proName = proFilName;
464457
proName.truncate(proName.lastIndexOf("."));
@@ -485,13 +478,12 @@ void LemonLime::cleanupButtonClicked() {
485478
}
486479

487480
conDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
488-
conDirLis = conDir.entryInfoList();
489481

490-
foreach (QFileInfo proDirWho, conDirLis) {
482+
for (const auto &proDirWho : conDir.entryInfoList()) {
491483
QDir proDir(proDirWho.filePath());
492484
proDir.setFilter(QDir::Files | QDir::Hidden);
493485

494-
foreach (QFileInfo sorFilWho, proDir.entryInfoList())
486+
for (const auto &sorFilWho : proDir.entryInfoList())
495487
QFile::copy(sorFilWho.filePath(),
496488
conDirWho.filePath() + QDir::separator() + sorFilWho.fileName());
497489
}

0 commit comments

Comments
 (0)