| 31 | |
| 32 | template <typename Filter> |
| 33 | std::vector<std::string> Split(LiteString text, LiteString delims, |
| 34 | Filter f) { |
| 35 | std::vector<std::string> result; |
| 36 | size_t token_start = 0; |
| 37 | if (!text.empty()) { |
| 38 | for (size_t i = 0; i < text.size() + 1; i++) { |
| 39 | if ((i == text.size()) || (delims.find(text[i]) != LiteString::npos)) { |
| 40 | LiteString token(text.data() + token_start, i - token_start); |
| 41 | if (f(token)) { |
| 42 | result.push_back(token.ToString()); |
| 43 | } |
| 44 | token_start = i + 1; |
| 45 | } |
| 46 | } |
| 47 | } |
| 48 | return result; |
| 49 | } |
| 50 | |
| 51 | } // anonymous namespace |
| 52 | |