Sat, 01 Feb 2025 13:59:01 +0100
improve heatmap::add() by using C++23 ranges-v3
configure | file | annotate | diff | comparison | revisions | |
make/project.xml | file | annotate | diff | comparison | revisions | |
src/heatmap.cpp | file | annotate | diff | comparison | revisions |
--- a/configure Fri Jan 31 23:20:20 2025 +0100 +++ b/configure Sat Feb 01 13:59:01 2025 +0100 @@ -293,7 +293,7 @@ break fi - TEMP_CXXFLAGS="$TEMP_CXXFLAGS -std=c++20" + TEMP_CXXFLAGS="$TEMP_CXXFLAGS -std=c++23" break done break
--- a/make/project.xml Fri Jan 31 23:20:20 2025 +0100 +++ b/make/project.xml Sat Feb 01 13:59:01 2025 +0100 @@ -2,7 +2,7 @@ <project version="0.3" xmlns="http://unixwork.de/uwproj"> <dependency> <lang>cpp</lang> - <cxxflags>-std=c++20</cxxflags> + <cxxflags>-std=c++23</cxxflags> </dependency> </project>
--- a/src/heatmap.cpp Fri Jan 31 23:20:20 2025 +0100 +++ b/src/heatmap.cpp Sat Feb 01 13:59:01 2025 +0100 @@ -36,23 +36,18 @@ for (auto &&line: std::views::split(log, "\n"sv)) { if (line.empty()) continue; auto parts = std::views::split(line, "#"sv).begin(); - auto author_range = *parts; - std::string author{author_range.begin(), author_range.end()}; + std::string author{(*parts).begin(), (*parts).end()}; int year = 0; unsigned int month = 0, day = 0; - unsigned part = 0; - for (auto &&date_part: std::views::split(*++parts, "-"sv)) { - std::string_view dp{date_part.begin(), date_part.end()}; - int val; - // no error handling, we trust hg and git - std::from_chars(dp.begin(), dp.end(), val); - switch (part++) { - case 0: year = val; break; - case 1: month = val; break; - default: day = val; break; - } - } - m_heatmap[m_current_repo][author][chrono::year_month_day{chrono::year{year}, chrono::month{month}, chrono::day{day}}]++; + auto date_parts = std::views::split(*++parts, "-"sv) + | std::views::transform([](auto r) { return std::string_view(r); }) + | std::ranges::to<std::vector>(); + std::from_chars(date_parts[0].begin(), date_parts[0].end(), year); + std::from_chars(date_parts[1].begin(), date_parts[1].end(), month); + std::from_chars(date_parts[2].begin(), date_parts[2].end(), day); + m_heatmap[m_current_repo][author][chrono::year_month_day{ + chrono::year{year}, chrono::month{month}, chrono::day{day} + }]++; } }