src/heatmap.cpp

changeset 10
bf159cf9f4b6
parent 5
60c2588b4455
child 16
730a5638c4ad
equal deleted inserted replaced
9:98312f94dbdd 10:bf159cf9f4b6
34 using std::string_view_literals::operator ""sv; 34 using std::string_view_literals::operator ""sv;
35 35
36 for (auto &&line: std::views::split(log, "\n"sv)) { 36 for (auto &&line: std::views::split(log, "\n"sv)) {
37 if (line.empty()) continue; 37 if (line.empty()) continue;
38 auto parts = std::views::split(line, "#"sv).begin(); 38 auto parts = std::views::split(line, "#"sv).begin();
39 auto author_range = *parts; 39 std::string author{(*parts).begin(), (*parts).end()};
40 std::string author{author_range.begin(), author_range.end()};
41 40
42 int year = 0; 41 int year = 0;
43 unsigned int month = 0, day = 0; 42 unsigned int month = 0, day = 0;
44 unsigned part = 0; 43 auto date_parts = std::views::split(*++parts, "-"sv)
45 for (auto &&date_part: std::views::split(*++parts, "-"sv)) { 44 | std::views::transform([](auto r) { return std::string_view(r); })
46 std::string_view dp{date_part.begin(), date_part.end()}; 45 | std::ranges::to<std::vector>();
47 int val; 46 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year);
48 // no error handling, we trust hg and git 47 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month);
49 std::from_chars(dp.begin(), dp.end(), val); 48 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day);
50 switch (part++) { 49 m_heatmap[m_current_repo][author][chrono::year_month_day{
51 case 0: year = val; break; 50 chrono::year{year}, chrono::month{month}, chrono::day{day}
52 case 1: month = val; break; 51 }]++;
53 default: day = val; break;
54 }
55 }
56 m_heatmap[m_current_repo][author][chrono::year_month_day{chrono::year{year}, chrono::month{month}, chrono::day{day}}]++;
57 } 52 }
58 } 53 }

mercurial