Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 14 additions & 29 deletions src/Duplo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,19 @@ typedef const std::string* StringPtr;
typedef std::unordered_map<unsigned long, std::vector<StringPtr>> HashToFiles;
using json = nlohmann::json;

static constexpr std::size_t TOP_N_LONGEST = 10;

namespace {
void printLongestFiles(std::ostringstream &oss, std::vector<SourceFile> &sourceFiles, std::size_t top_n) {
std::sort(std::begin(sourceFiles),
std::end(sourceFiles),
[](SourceFile const& l, SourceFile const& r) {
return l.GetNumOfLines() > r.GetNumOfLines();
});
std::for_each_n(std::begin(sourceFiles), top_n, [&oss](SourceFile const& file) {
oss << file.GetNumOfLines() << ": " << file.GetFilename() << '\n';
});
}

std::tuple<std::vector<SourceFile>, std::vector<bool>, unsigned, unsigned> LoadSourceFiles(
const std::vector<std::string>& lines,
Expand All @@ -39,16 +51,6 @@ namespace {
size_t maxLinesPerFile = 0;
int files = 0;
unsigned long locsTotal = 0;
std::vector<FileLength> longestFiles;
auto addSorted = [&longestFiles](int numLines, const std::string& filename) {
longestFiles.emplace_back(numLines, filename);
std::sort(
std::begin(longestFiles),
std::end(longestFiles),
[](auto l, auto r) { return std::get<0>(l) > std::get<0>(r); });
if (longestFiles.size() > 10)
longestFiles.resize(10);
};

// Create vector with all source files
for (size_t i = 0; i < lines.size(); i++) {
Expand All @@ -62,17 +64,6 @@ namespace {
if (maxLinesPerFile < numLines) {
maxLinesPerFile = numLines;
}

// keep 10 worst case files
if (longestFiles.size() < 10) {
addSorted(numLines, lines[i]);
} else {
auto& [l, r] = longestFiles.back();
(void)r;
if (l < numLines) {
addSorted(numLines, lines[i]);
}
}
}
}
}
Expand All @@ -84,10 +75,7 @@ namespace {
<< std::sqrt(matrix.max_size())
<< " lines at most." << std::endl
<< "Longest files:" << std::endl;
for (auto& [l, f] : longestFiles) {
stream << l << ": " << f << std::endl;
}

printLongestFiles(stream, sourceFiles, TOP_N_LONGEST);
throw std::runtime_error(stream.str().c_str());
}

Expand All @@ -103,10 +91,7 @@ namespace {
stream
<< ex.what() << std::endl
<< "Longest files:" << std::endl;
for (auto& [l, f] : longestFiles) {
stream << l << ": " << f << std::endl;
}

printLongestFiles(stream, sourceFiles, TOP_N_LONGEST);
throw std::runtime_error(stream.str().c_str());
}

Expand Down
10 changes: 10 additions & 0 deletions src/SourceFile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@ SourceFile::SourceFile(SourceFile&& right) noexcept
, m_sourceLines(std::move(right.m_sourceLines)) {
}

SourceFile &SourceFile::operator=(SourceFile const &other) {
if (this == &other) {
return *this;
}
m_filename = other.m_filename;
m_fileType = other.m_fileType;
m_sourceLines = other.m_sourceLines;
return *this;
}

size_t SourceFile::GetNumOfLines() const {
return m_sourceLines.size();
}
Expand Down
1 change: 1 addition & 0 deletions src/include/SourceFile.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class SourceFile {
public:
SourceFile(const std::string& fileName, unsigned minChars, bool ignorePrepStuff);
SourceFile(SourceFile&& right) noexcept;
SourceFile &operator=(SourceFile const &other);

size_t GetNumOfLines() const;
const SourceLine& GetLine(int index) const;
Expand Down
Loading