From 875ee9ab419e4adec4416b1b52ad68ac8d3d3683 Mon Sep 17 00:00:00 2001 From: firewave Date: Sun, 15 Jun 2025 17:16:45 +0200 Subject: [PATCH 1/2] ThreadResult: use `FileWithDetails` for `mFiles` --- gui/checkthread.cpp | 24 +++++++++++++----------- gui/threadresult.cpp | 23 +++++++++++++++-------- gui/threadresult.h | 6 +++--- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/gui/checkthread.cpp b/gui/checkthread.cpp index e6fc23a0fd8..e83a2d09dd2 100644 --- a/gui/checkthread.cpp +++ b/gui/checkthread.cpp @@ -151,25 +151,27 @@ void CheckThread::run() return; } - QString file = mResult.getNextFile(); - while (!file.isEmpty() && mState == Running) { - qDebug() << "Checking file" << file; - cppcheck.check(FileWithDetails(file.toStdString(), Path::identify(file.toStdString(), mSettings.cppHeaderProbe), 0)); - runAddonsAndTools(mSettings, nullptr, file); - emit fileChecked(file); + const FileWithDetails* file = nullptr; + mResult.getNextFile(file); + while (file && mState == Running) { + const std::string& fname = file->spath(); + qDebug() << "Checking file" << QString::fromStdString(fname); + cppcheck.check(*file); + runAddonsAndTools(mSettings, nullptr, QString::fromStdString(fname)); + emit fileChecked(QString::fromStdString(fname)); if (mState == Running) - file = mResult.getNextFile(); + mResult.getNextFile(file); } const FileSettings* fileSettings = nullptr; mResult.getNextFileSettings(fileSettings); while (fileSettings && mState == Running) { - file = QString::fromStdString(fileSettings->filename()); - qDebug() << "Checking file" << file; + const std::string& fname = fileSettings->filename(); + qDebug() << "Checking file" << QString::fromStdString(fname); cppcheck.check(*fileSettings); - runAddonsAndTools(mSettings, fileSettings, QString::fromStdString(fileSettings->filename())); - emit fileChecked(file); + runAddonsAndTools(mSettings, fileSettings, QString::fromStdString(fname)); + emit fileChecked(QString::fromStdString(fname)); if (mState == Running) mResult.getNextFileSettings(fileSettings); diff --git a/gui/threadresult.cpp b/gui/threadresult.cpp index 008d201c42d..82e71d110c2 100644 --- a/gui/threadresult.cpp +++ b/gui/threadresult.cpp @@ -58,14 +58,15 @@ void ThreadResult::reportErr(const ErrorMessage &msg) emit debugError(item); } -QString ThreadResult::getNextFile() +void ThreadResult::getNextFile(const FileWithDetails*& file) { std::lock_guard locker(mutex); - if (mFiles.isEmpty()) { - return QString(); + file = nullptr; + if (mItNextFile == mFiles.cend()) { + return; } - - return mFiles.takeFirst(); + file = &(*mItNextFile); + ++mItNextFile; } void ThreadResult::getNextFileSettings(const FileSettings*& fs) @@ -82,15 +83,21 @@ void ThreadResult::getNextFileSettings(const FileSettings*& fs) void ThreadResult::setFiles(const QStringList &files) { std::lock_guard locker(mutex); - mFiles = files; + std::list fdetails; + for (const QString& f : files) + { + fdetails.emplace_back(f.toStdString(), Path::identify(f.toStdString(), false), QFile(f).size()); // TODO: provide Settings::cppHeaderProbe + } + mFiles = std::move(fdetails); + mItNextFile = mFiles.cbegin(); mProgress = 0; mFilesChecked = 0; mTotalFiles = files.size(); // Determine the total size of all of the files to check, so that we can // show an accurate progress estimate - quint64 sizeOfFiles = std::accumulate(files.begin(), files.end(), 0, [](quint64 total, const QString& file) { - return total + QFile(file).size(); + quint64 sizeOfFiles = std::accumulate(mFiles.cbegin(), mFiles.cend(), 0, [](quint64 total, const FileWithDetails& file) { + return total + file.size(); }); mMaxProgress = sizeOfFiles; } diff --git a/gui/threadresult.h b/gui/threadresult.h index 8f291b01c77..33dc8290134 100644 --- a/gui/threadresult.h +++ b/gui/threadresult.h @@ -50,9 +50,8 @@ class ThreadResult : public QObject, public ErrorLogger { /** * @brief Get next unprocessed file - * @return File path */ - QString getNextFile(); + void getNextFile(const FileWithDetails*& file); void getNextFileSettings(const FileSettings*& fs); @@ -138,7 +137,8 @@ public slots: * @brief List of files to check * */ - QStringList mFiles; + std::list mFiles; + std::list::const_iterator mItNextFile; std::list mFileSettings; std::list::const_iterator mItNextFileSettings; From 1121eaf3d48b08e82ffebcde1c51a48ab4fa61bc Mon Sep 17 00:00:00 2001 From: firewave Date: Sun, 15 Jun 2025 22:11:39 +0200 Subject: [PATCH 2/2] threadresult.cpp: fixed `useStlAlgorithm` selfcheck warning --- gui/threadresult.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/gui/threadresult.cpp b/gui/threadresult.cpp index 82e71d110c2..8300aeb41a7 100644 --- a/gui/threadresult.cpp +++ b/gui/threadresult.cpp @@ -84,10 +84,9 @@ void ThreadResult::setFiles(const QStringList &files) { std::lock_guard locker(mutex); std::list fdetails; - for (const QString& f : files) - { - fdetails.emplace_back(f.toStdString(), Path::identify(f.toStdString(), false), QFile(f).size()); // TODO: provide Settings::cppHeaderProbe - } + std::transform(files.cbegin(), files.cend(), std::back_inserter(fdetails), [](const QString& f) { + return FileWithDetails{f.toStdString(), Path::identify(f.toStdString(), false), static_cast(QFile(f).size())}; // TODO: provide Settings::cppHeaderProbe + }); mFiles = std::move(fdetails); mItNextFile = mFiles.cbegin(); mProgress = 0;