#ifndef STRUTIL_HH #define STRUTIL_HH #include #include #include #include #include namespace str { std::optional parse_uint16(std::string const& str); std::optional parse_uint32(std::string const& str); std::optional parse_uint64(std::string const& str); // Empty substrings are ignored but out will always be at least one entry std::vector split(std::string_view str, char delim = ' '); std::vector split(std::string const& str, char delim = ' '); std::string join(std::vector const& in, char delim); std::string join(std::vector const& in, std::string_view delim); void join(std::vector const& in, char delim, std::string& out); void join(std::vector const& in, std::string_view delim, std::string& out); std::string join(std::vector const& in, char delim); std::string join(std::vector const& in, std::string_view delim); void join(std::vector const& in, char delim, std::string& out); void join(std::vector const& in, std::string_view delim, std::string& out); [[nodiscard]] std::string_view trim(std::string_view str); [[nodiscard]] std::string trim(std::string const& str); [[nodiscard]] std::string_view ltrim(std::string_view str); [[nodiscard]] std::string ltrim(std::string const& str); [[nodiscard]] std::string_view rtrim(std::string_view str); [[nodiscard]] std::string rtrim(std::string const& str); [[nodiscard]] bool starts_with(std::string_view str, std::string_view prefix); [[nodiscard]] bool ends_with(std::string_view str, std::string_view suffix); } // namespace str #endif // STRUTIL_HH