diff options
Diffstat (limited to 'gentoobrowse-api/domain/converters.impl.h')
-rw-r--r-- | gentoobrowse-api/domain/converters.impl.h | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/gentoobrowse-api/domain/converters.impl.h b/gentoobrowse-api/domain/converters.impl.h index f6b6bad..d79b7e4 100644 --- a/gentoobrowse-api/domain/converters.impl.h +++ b/gentoobrowse-api/domain/converters.impl.h @@ -7,18 +7,22 @@ namespace Slicer { template<typename T> class UnpackPqTextArrayInto : public UnpackPqTextArray { public: - UnpackPqTextArrayInto(std::istream & s, std::vector<T> & l) : UnpackPqTextArray(s), list(l) { } + UnpackPqTextArrayInto(std::istream & inputStrm, std::vector<T> & output) : + UnpackPqTextArray(inputStrm), list(output) + { + } void - consume(std::string s) override + consume(std::string input) override { if constexpr (std::is_arithmetic_v<T>) { - if (std::from_chars(s.c_str(), s.c_str() + s.length(), list.emplace_back()).ec != std::error_code {}) { + if (std::from_chars(input.c_str(), input.c_str() + input.length(), list.emplace_back()).ec + != std::error_code {}) { throw std::domain_error {"Invalid arithmetic input"}; } } else { - list.emplace_back(std::move(s)); + list.emplace_back(std::move(input)); } } @@ -28,50 +32,50 @@ namespace Slicer { template<typename T> void - packPqVar(std::ostream & s, const T & l) + packPqVar(std::ostream & outputStrm, const T & input) { if constexpr (std::is_arithmetic_v<T>) { - s << l; + outputStrm << input; } else { - s << '\"'; - std::transform(l.begin(), l.end(), std::ostream_iterator<std::string_view>(s), [](const char & c) { - if (c == '"') { + outputStrm << '\"'; + std::ranges::transform(input, std::ostream_iterator<std::string_view>(outputStrm), [](const char & chr) { + if (chr == '"') { return std::string_view(R"(\")"); } - return std::string_view(&c, 1); + return std::string_view(&chr, 1); }); - s << '\"'; + outputStrm << '\"'; } } template<typename T> std::vector<T> - unpackPqArray(const std::string & s) + unpackPqArray(const std::string & input) { std::vector<T> rtn; - std::stringstream ss(s); - UnpackPqTextArrayInto<T> u(ss, rtn); - u.yylex(); + std::stringstream inputStrm(input); + UnpackPqTextArrayInto<T> unpacker(inputStrm, rtn); + unpacker.yylex(); return rtn; } template<typename T> std::string - packPqArray(const T & l) + packPqArray(const T & input) { - std::stringstream ss; - ss << "{"; - if (!l.empty()) { - auto i = l.cbegin(); - packPqVar(ss, *i); - i++; - while (i != l.cend()) { - ss << ","; - packPqVar(ss, *i++); + std::stringstream outputStrm; + outputStrm << "{"; + if (!input.empty()) { + auto chr = input.cbegin(); + packPqVar(outputStrm, *chr); + chr++; + while (chr != input.cend()) { + outputStrm << ","; + packPqVar(outputStrm, *chr++); } } - ss << "}"; - return std::move(ss).str(); + outputStrm << "}"; + return std::move(outputStrm).str(); } } |