31 namespace chrono = std::chrono; |
31 namespace chrono = std::chrono; |
32 |
32 |
33 void fm::heatmap::add(const fm::settings &settings, const std::string &log) { |
33 void fm::heatmap::add(const fm::settings &settings, const std::string &log) { |
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); |
39 std::string author{settings.map_author({(*parts).begin(), (*parts).end()})}; |
39 auto parts_iter = parts.begin(); |
|
40 std::string author{settings.map_author(std::string_view{*parts_iter})}; |
40 |
41 |
41 int year = 0; |
42 int year = 0; |
42 unsigned int month = 0, day = 0; |
43 unsigned int month = 0, day = 0; |
43 auto date_parts = std::views::split(*++parts, "-"sv) |
44 ++parts_iter; |
|
45 auto date_parts = std::views::split(*parts_iter, "-"sv) |
44 | std::views::transform([](auto r) { return std::string_view(r); }) |
46 | std::views::transform([](auto r) { return std::string_view(r); }) |
45 | std::ranges::to<std::vector>(); |
47 | std::ranges::to<std::vector>(); |
46 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
48 std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); |
47 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
49 std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); |
48 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |
50 std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); |