0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-10 14:08:56 +02:00

ircd: Add tokens_split() tool w/ skip feature.

This commit is contained in:
Jason Volk 2022-07-18 12:28:47 -07:00
parent b637eb0c50
commit 432f38cd06
2 changed files with 43 additions and 0 deletions

View file

@ -104,6 +104,9 @@ namespace ircd
string_view tokens_before(const string_view &str, const char sep, const size_t at = 0) noexcept;
string_view tokens_before(const string_view &str, const string_view &sep, const size_t at = 0) noexcept;
pair<string_view> tokens_split(const string_view &str, const char sep, const size_t at = 0, const size_t skip = 0) noexcept;
pair<string_view> tokens_split(const string_view &str, const string_view &sep, const size_t at = 0, const size_t skip = 0) noexcept;
}
template<size_t N,

View file

@ -48,6 +48,46 @@ ircd::char_separator
// interface
//
ircd::pair<ircd::string_view>
ircd::tokens_split(const string_view &str,
const char sep,
const size_t at,
const size_t skip)
noexcept
{
const ssize_t before(at);
const ssize_t after
{
(before - 1) + ssize_t(skip)
};
return pair<string_view>
{
tokens_before(str, sep, before),
tokens_after(str, sep, after)
};
}
ircd::pair<ircd::string_view>
ircd::tokens_split(const string_view &str,
const string_view &sep,
const size_t at,
const size_t skip)
noexcept
{
const ssize_t before(at);
const ssize_t after
{
(before - 1) + ssize_t(skip)
};
return pair<string_view>
{
tokens_before(str, sep, before),
tokens_after(str, sep, after)
};
}
ircd::string_view
ircd::tokens_before(const string_view &str,
const char sep,