#include "str.hh" #include #include #include namespace str { namespace { [[nodiscard]] inline bool is_space(char c) { return c == ' ' || c == '\t' || c == '\r' || c == '\n'; } } // namespace void split(std::string_view str, std::vector& out, char separator, bool keep_empty) { out.clear(); size_t offset = 0; while (true) { auto next = str.find(separator, offset); if (next == std::string_view::npos) { if (keep_empty || offset < str.size()) out.push_back(str.substr(offset)); break; } if (keep_empty || offset < next) out.push_back(str.substr(offset, next - offset)); offset = next + 1; } } std::vector split(std::string_view str, char separator, bool keep_empty) { std::vector vec; split(str, vec, separator, keep_empty); return vec; } std::string_view trim(std::string_view str) { size_t s = 0; size_t e = str.size(); while (s < e && is_space(str[s])) ++s; while (e > s && is_space(str[e - 1])) --e; return str.substr(s, e - s); } } // namespace str