@@ -26,7 +26,19 @@ typedef const std::string* StringPtr;
2626typedef std::unordered_map<unsigned long , std::vector<StringPtr>> HashToFiles;
2727using json = nlohmann::json;
2828
29+ static constexpr std::size_t TOP_N_LONGEST = 10 ;
30+
2931namespace {
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
0 commit comments