Skip to content

Commit c7e7c7e

Browse files
authored
ThreadResult: use FileWithDetails for mFiles (danmar#7598)
1 parent 0ce96b3 commit c7e7c7e

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

gui/checkthread.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -151,25 +151,27 @@ void CheckThread::run()
151151
return;
152152
}
153153

154-
QString file = mResult.getNextFile();
155-
while (!file.isEmpty() && mState == Running) {
156-
qDebug() << "Checking file" << file;
157-
cppcheck.check(FileWithDetails(file.toStdString(), Path::identify(file.toStdString(), mSettings.cppHeaderProbe), 0));
158-
runAddonsAndTools(mSettings, nullptr, file);
159-
emit fileChecked(file);
154+
const FileWithDetails* file = nullptr;
155+
mResult.getNextFile(file);
156+
while (file && mState == Running) {
157+
const std::string& fname = file->spath();
158+
qDebug() << "Checking file" << QString::fromStdString(fname);
159+
cppcheck.check(*file);
160+
runAddonsAndTools(mSettings, nullptr, QString::fromStdString(fname));
161+
emit fileChecked(QString::fromStdString(fname));
160162

161163
if (mState == Running)
162-
file = mResult.getNextFile();
164+
mResult.getNextFile(file);
163165
}
164166

165167
const FileSettings* fileSettings = nullptr;
166168
mResult.getNextFileSettings(fileSettings);
167169
while (fileSettings && mState == Running) {
168-
file = QString::fromStdString(fileSettings->filename());
169-
qDebug() << "Checking file" << file;
170+
const std::string& fname = fileSettings->filename();
171+
qDebug() << "Checking file" << QString::fromStdString(fname);
170172
cppcheck.check(*fileSettings);
171-
runAddonsAndTools(mSettings, fileSettings, QString::fromStdString(fileSettings->filename()));
172-
emit fileChecked(file);
173+
runAddonsAndTools(mSettings, fileSettings, QString::fromStdString(fname));
174+
emit fileChecked(QString::fromStdString(fname));
173175

174176
if (mState == Running)
175177
mResult.getNextFileSettings(fileSettings);

gui/threadresult.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,15 @@ void ThreadResult::reportErr(const ErrorMessage &msg)
5858
emit debugError(item);
5959
}
6060

61-
QString ThreadResult::getNextFile()
61+
void ThreadResult::getNextFile(const FileWithDetails*& file)
6262
{
6363
std::lock_guard<std::mutex> locker(mutex);
64-
if (mFiles.isEmpty()) {
65-
return QString();
64+
file = nullptr;
65+
if (mItNextFile == mFiles.cend()) {
66+
return;
6667
}
67-
68-
return mFiles.takeFirst();
68+
file = &(*mItNextFile);
69+
++mItNextFile;
6970
}
7071

7172
void ThreadResult::getNextFileSettings(const FileSettings*& fs)
@@ -82,15 +83,20 @@ void ThreadResult::getNextFileSettings(const FileSettings*& fs)
8283
void ThreadResult::setFiles(const QStringList &files)
8384
{
8485
std::lock_guard<std::mutex> locker(mutex);
85-
mFiles = files;
86+
std::list<FileWithDetails> fdetails;
87+
std::transform(files.cbegin(), files.cend(), std::back_inserter(fdetails), [](const QString& f) {
88+
return FileWithDetails{f.toStdString(), Path::identify(f.toStdString(), false), static_cast<std::size_t>(QFile(f).size())}; // TODO: provide Settings::cppHeaderProbe
89+
});
90+
mFiles = std::move(fdetails);
91+
mItNextFile = mFiles.cbegin();
8692
mProgress = 0;
8793
mFilesChecked = 0;
8894
mTotalFiles = files.size();
8995

9096
// Determine the total size of all of the files to check, so that we can
9197
// show an accurate progress estimate
92-
quint64 sizeOfFiles = std::accumulate(files.begin(), files.end(), 0, [](quint64 total, const QString& file) {
93-
return total + QFile(file).size();
98+
quint64 sizeOfFiles = std::accumulate(mFiles.cbegin(), mFiles.cend(), 0, [](quint64 total, const FileWithDetails& file) {
99+
return total + file.size();
94100
});
95101
mMaxProgress = sizeOfFiles;
96102
}

gui/threadresult.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,8 @@ class ThreadResult : public QObject, public ErrorLogger {
5050

5151
/**
5252
* @brief Get next unprocessed file
53-
* @return File path
5453
*/
55-
QString getNextFile();
54+
void getNextFile(const FileWithDetails*& file);
5655

5756
void getNextFileSettings(const FileSettings*& fs);
5857

@@ -138,7 +137,8 @@ public slots:
138137
* @brief List of files to check
139138
*
140139
*/
141-
QStringList mFiles;
140+
std::list<FileWithDetails> mFiles;
141+
std::list<FileWithDetails>::const_iterator mItNextFile;
142142

143143
std::list<FileSettings> mFileSettings;
144144
std::list<FileSettings>::const_iterator mItNextFileSettings;

0 commit comments

Comments
 (0)