Skip to content

Commit b5d01b5

Browse files
authored
Merge pull request #58 from cgkantidis/long_files
2 parents a7dc169 + c08cb0b commit b5d01b5

File tree

3 files changed

+25
-29
lines changed

3 files changed

+25
-29
lines changed

src/Duplo.cpp

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,19 @@ typedef const std::string* StringPtr;
2626
typedef std::unordered_map<unsigned long, std::vector<StringPtr>> HashToFiles;
2727
using json = nlohmann::json;
2828

29+
static constexpr std::size_t TOP_N_LONGEST = 10;
30+
2931
namespace {
32+
void printLongestFiles(std::ostringstream &oss, std::vector<SourceFile> &sourceFiles, std::size_t top_n) {
33+
std::sort(std::begin(sourceFiles),
34+
std::end(sourceFiles),
35+
[](SourceFile const& l, SourceFile const& r) {
36+
return l.GetNumOfLines() > r.GetNumOfLines();
37+
});
38+
std::for_each_n(std::begin(sourceFiles), top_n, [&oss](SourceFile const& file) {
39+
oss << file.GetNumOfLines() << ": " << file.GetFilename() << '\n';
40+
});
41+
}
3042

3143
std::tuple<std::vector<SourceFile>, std::vector<bool>, unsigned, unsigned> LoadSourceFiles(
3244
const std::vector<std::string>& lines,
@@ -39,16 +51,6 @@ namespace {
3951
size_t maxLinesPerFile = 0;
4052
int files = 0;
4153
unsigned long locsTotal = 0;
42-
std::vector<FileLength> longestFiles;
43-
auto addSorted = [&longestFiles](int numLines, const std::string& filename) {
44-
longestFiles.emplace_back(numLines, filename);
45-
std::sort(
46-
std::begin(longestFiles),
47-
std::end(longestFiles),
48-
[](auto l, auto r) { return std::get<0>(l) > std::get<0>(r); });
49-
if (longestFiles.size() > 10)
50-
longestFiles.resize(10);
51-
};
5254

5355
// Create vector with all source files
5456
for (size_t i = 0; i < lines.size(); i++) {
@@ -62,17 +64,6 @@ namespace {
6264
if (maxLinesPerFile < numLines) {
6365
maxLinesPerFile = numLines;
6466
}
65-
66-
// keep 10 worst case files
67-
if (longestFiles.size() < 10) {
68-
addSorted(numLines, lines[i]);
69-
} else {
70-
auto& [l, r] = longestFiles.back();
71-
(void)r;
72-
if (l < numLines) {
73-
addSorted(numLines, lines[i]);
74-
}
75-
}
7667
}
7768
}
7869
}
@@ -84,10 +75,7 @@ namespace {
8475
<< std::sqrt(matrix.max_size())
8576
<< " lines at most." << std::endl
8677
<< "Longest files:" << std::endl;
87-
for (auto& [l, f] : longestFiles) {
88-
stream << l << ": " << f << std::endl;
89-
}
90-
78+
printLongestFiles(stream, sourceFiles, TOP_N_LONGEST);
9179
throw std::runtime_error(stream.str().c_str());
9280
}
9381

@@ -103,10 +91,7 @@ namespace {
10391
stream
10492
<< ex.what() << std::endl
10593
<< "Longest files:" << std::endl;
106-
for (auto& [l, f] : longestFiles) {
107-
stream << l << ": " << f << std::endl;
108-
}
109-
94+
printLongestFiles(stream, sourceFiles, TOP_N_LONGEST);
11095
throw std::runtime_error(stream.str().c_str());
11196
}
11297

src/SourceFile.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@ SourceFile::SourceFile(SourceFile&& right) noexcept
2525
, m_sourceLines(std::move(right.m_sourceLines)) {
2626
}
2727

28+
SourceFile &SourceFile::operator=(SourceFile const &other) {
29+
if (this == &other) {
30+
return *this;
31+
}
32+
m_filename = other.m_filename;
33+
m_fileType = other.m_fileType;
34+
m_sourceLines = other.m_sourceLines;
35+
return *this;
36+
}
37+
2838
size_t SourceFile::GetNumOfLines() const {
2939
return m_sourceLines.size();
3040
}

src/include/SourceFile.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class SourceFile {
1414
public:
1515
SourceFile(const std::string& fileName, unsigned minChars, bool ignorePrepStuff);
1616
SourceFile(SourceFile&& right) noexcept;
17+
SourceFile &operator=(SourceFile const &other);
1718

1819
size_t GetNumOfLines() const;
1920
const SourceLine& GetLine(int index) const;

0 commit comments

Comments
 (0)