src/heatmap.cpp

changeset 57
4454fe0aed0d
parent 56
3d2720f95cfb
parent 55
3541b2c77dfd
equal deleted inserted replaced
56:3d2720f95cfb 57:4454fe0aed0d
34 using std::string_view_literals::operator ""sv; 34 using std::string_view_literals::operator ""sv;
35 const std::string repo_key = m_separate ? m_current_repo : "All Repositories"; 35 const std::string repo_key = m_separate ? m_current_repo : "All Repositories";
36 36
37 for (auto line: std::views::split(log, "\n"sv)) { 37 for (auto line: std::views::split(log, "\n"sv)) {
38 if (line.empty()) continue; 38 if (line.empty()) continue;
39 auto parts = std::views::split(line, "#"sv); 39
40 auto parts_iter = parts.begin(); 40 // find all delimiters
41 std::string author{settings.map_author(std::string_view{*parts_iter})}; 41 const auto line_view = std::string_view{line};
42 const auto pos_delim1 = line_view.find('#', 0);
43 const auto pos_delim2 = line_view.find('#', pos_delim1 + 1);
44
45 std::string author{settings.map_author(line_view.substr(0, pos_delim1))};
46 std::string_view date_view{line_view.substr(pos_delim1+1, pos_delim2)};
47 std::string_view summary_view{line_view.substr(pos_delim2+1)};
42 48
43 int year = 0; 49 int year = 0;
44 unsigned int month = 0, day = 0; 50 unsigned int month = 0, day = 0;
45 ++parts_iter; 51 auto date_parts = std::views::split(date_view, "-"sv)
46 auto date_parts = std::views::split(*parts_iter, "-"sv)
47 | std::views::transform([](auto r) { return std::string_view(r); }) 52 | std::views::transform([](auto r) { return std::string_view(r); })
48 | std::ranges::to<std::vector>(); 53 | std::ranges::to<std::vector>();
49 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); 54 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year);
50 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); 55 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month);
51 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); 56 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day);
52 auto &[summaries] = m_heatmap[repo_key][author][chrono::year_month_day{ 57 auto &[summaries] = m_heatmap[repo_key][author][chrono::year_month_day{
53 chrono::year{year}, chrono::month{month}, chrono::day{day} 58 chrono::year{year}, chrono::month{month}, chrono::day{day}
54 }]; 59 }];
55 ++parts_iter; 60 summaries[m_current_repo].emplace_back(summary_view);
56 summaries[m_current_repo].emplace_back(std::string_view{*parts_iter});
57 } 61 }
58 } 62 }
59 63
60 std::array<unsigned int, 12> fm::heatmap::commits_per_month( 64 std::array<unsigned int, 12> fm::heatmap::commits_per_month(
61 const std::string& repo, 65 const std::string& repo,

mercurial