diff --git a/include/ircd/lexical.h b/include/ircd/lexical.h index 3c4c24d7a..dc93b879c 100644 --- a/include/ircd/lexical.h +++ b/include/ircd/lexical.h @@ -150,8 +150,10 @@ char *strip_unprintable(char *string); char *reconstruct_parv(int parc, const char **parv); string_view chomp(const string_view &str, const string_view &c = " "s); -std::pair split(const string_view &str, const string_view &delim = " "s); -std::pair rsplit(const string_view &str, const string_view &delim = " "s); +std::pair split(const string_view &str, const char &delim = ' '); +std::pair split(const string_view &str, const string_view &delim); +std::pair rsplit(const string_view &str, const char &delim = ' '); +std::pair rsplit(const string_view &str, const string_view &delim); string_view between(const string_view &str, const string_view &a = "("s, const string_view &b = ")"s); bool endswith(const string_view &str, const string_view &val); bool endswith(const string_view &str, const char &val); @@ -226,7 +228,6 @@ ircd::between(const string_view &str, return split(split(str, a).second, b).first; } - inline std::pair ircd::rsplit(const string_view &str, const string_view &delim) @@ -244,6 +245,23 @@ ircd::rsplit(const string_view &str, }; } +inline std::pair +ircd::rsplit(const string_view &str, + const char &delim) +{ + const auto pos(str.find_last_of(delim)); + if(pos == string_view::npos) return + { + string_view{}, + str + }; + else return + { + str.substr(0, pos), + str.substr(pos + 1) + }; +} + inline std::pair ircd::split(const string_view &str, const string_view &delim) @@ -261,6 +279,23 @@ ircd::split(const string_view &str, }; } +inline std::pair +ircd::split(const string_view &str, + const char &delim) +{ + const auto pos(str.find(delim)); + if(pos == string_view::npos) return + { + str, + string_view{} + }; + else return + { + str.substr(0, pos), + str.substr(pos + 1) + }; +} + inline ircd::string_view ircd::chomp(const string_view &str, const string_view &c)