0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2025-03-13 21:10:32 +01:00

ircd: Add tokens_before() to suite.

This commit is contained in:
Jason Volk 2018-03-25 16:30:09 -07:00
parent 34abaea046
commit 6574da4b22
2 changed files with 31 additions and 0 deletions

View file

@ -83,6 +83,8 @@ namespace ircd
string_view token_first(const string_view &str, const char *const &sep);
string_view tokens_after(const string_view &str, const char &sep, const size_t &at);
string_view tokens_after(const string_view &str, const char *const &sep, const size_t &at);
string_view tokens_before(const string_view &str, const char &sep, const size_t &at);
string_view tokens_before(const string_view &str, const char *const &sep, const size_t &at);
}
template<size_t N,

View file

@ -24,6 +24,35 @@
// ircd/tokens.h
//
ircd::string_view
ircd::tokens_before(const string_view &str,
const char &sep,
const size_t &i)
{
const char ssep[2] { sep, '\0' };
return tokens_before(str, ssep, i);
}
ircd::string_view
ircd::tokens_before(const string_view &str,
const char *const &sep,
const size_t &i)
{
using type = string_view;
using iter = typename type::const_iterator;
using delim = boost::char_separator<char>;
const delim d(sep);
const boost::tokenizer<delim, iter, type> view(str, d);
string_view ret;
auto it(begin(view));
for(size_t j(0); it != end(view) && j < i; ++it, j++)
ret = { begin(view)->data(), it->data() + it->size() };
return ret;
}
ircd::string_view
ircd::tokens_after(const string_view &str,
const char &sep,