8#include <range/v3/view/map.hpp>
13namespace rng = ranges;
18 auto split_string_view(std::string_view str, std::string_view del) -> std::vector<std::string_view>
20 auto splits = std::vector<std::string_view>{};
22 for (
auto sub_begin = str.find_first_not_of(del); sub_begin != std::string_view::npos;
23 sub_begin = str.find_first_not_of(del, sub_begin))
25 auto sub_end = str.find_first_of(del, sub_begin);
26 sub_end = (sub_end == std::string_view::npos) ? str.size() : sub_end;
27 auto sub_str = str.substr(sub_begin, sub_end - sub_begin);
28 splits.push_back(sub_str);
34 auto parse_parameter(std::string_view line_string) -> std::optional<ParResultEntry>
36 auto splits_view = split_string_view(line_string,
" ");
37 auto result = ParResultEntry{};
39 constexpr auto max_size = 5;
40 constexpr auto min_size = 3;
41 if (splits_view.size() >= min_size)
43 result.par_num = std::stoi(std::string{ splits_view.front() });
44 result.value = std::stof(std::string{ splits_view[1] });
45 result.sigma = std::stof(std::string{ splits_view[2] });
52 if (splits_view.size() == max_size)
54 result.value_diff = std::stof(std::string{ splits_view[3] });
55 result.error = std::stof(std::string{ splits_view.back() });
57 else if (splits_view.size() != min_size)
73 auto ifile = std::ifstream(
filename_, std::ios_base::in);
74 auto buffer = std::string{};
77 std::getline(ifile, buffer);
78 while (std::getline(ifile, buffer))
80 auto result = parse_parameter(buffer);
81 if (result.has_value())
89 fmt::println(
"ERROR: parameter file {:?} cannot be read",
filename_);
std::unordered_map< int, ParResultEntry > par_results_