diff options
author | Chris Dyer <redpony@gmail.com> | 2014-06-12 23:10:00 -0400 |
---|---|---|
committer | Chris Dyer <redpony@gmail.com> | 2014-06-12 23:10:00 -0400 |
commit | 72ef434a1e4b507d1252e39074f26226f236c83d (patch) | |
tree | a056ecb4bd41621b0b93dd2411658682a64a7e30 /utils/stringlib.h | |
parent | b66e838ed52decc0be1eb5817b2a77c3840db2c5 (diff) |
move string_piece to utils/ from inside klm
Diffstat (limited to 'utils/stringlib.h')
-rw-r--r-- | utils/stringlib.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/utils/stringlib.h b/utils/stringlib.h index 2fdbfff8..aadec93c 100644 --- a/utils/stringlib.h +++ b/utils/stringlib.h @@ -16,6 +16,8 @@ #include <sstream> #include <algorithm> +#include "string_piece.hh" + namespace { const char c_isspace[]=" \t\n\r\f\v"; // somewhat ridiculous, including characters nobody uses. const char common_isspace[]=" \t\n\r"; // even \n\r is borderline, but maybe you pass multiline DOS format text. @@ -221,6 +223,21 @@ void VisitTokens(char *p,char *const end,F f) { } } +inline std::vector<StringPiece> TokenizeMultisep(const StringPiece& text, const StringPiece& separator) { + std::vector<StringPiece> res; + size_t cur = 0; + while(cur < text.size()) { + const auto n = text.find(separator, cur); + if (n == StringPiece::npos) { + res.push_back(text.substr(cur)); + break; + } + res.push_back(text.substr(cur, n - cur)); + cur = n + separator.size(); + } + return res; +} + template <class F> void VisitTokens(char *p,F f) { VisitTokens(p,p+std::strlen(p),f); |