17void addEmptyFinalToken(
const std::string &str,
const std::string &delims, std::vector<std::string> &tokens) {
19 const auto pos = std::find(delims.cbegin(), delims.cend(), str.back());
21 if (pos != delims.cend()) {
22 tokens.emplace_back();
29template <
class InputIt,
class ForwardIt,
class BinOp>
30void for_each_token(InputIt first, InputIt last, ForwardIt s_first, ForwardIt s_last, BinOp binary_op) {
31 while (first != last) {
32 const auto pos = std::find_first_of(first, last, s_first, s_last);
33 binary_op(first, pos);
36 first = std::next(pos);
40void splitKeepingWhitespaceEmptyTokens(
const std::string &str,
const std::string &delims,
41 std::vector<std::string> &output) {
43 for_each_token(str.cbegin(), str.cend(), delims.cbegin(), delims.cend(),
44 [&output](std::string::const_iterator first, std::string::const_iterator second) {
45 output.emplace_back(first, second);
49void splitKeepingWhitespaceIgnoringEmptyTokens(
const std::string &str,
const std::string &delims,
50 std::vector<std::string> &output) {
52 for_each_token(str.cbegin(), str.cend(), delims.cbegin(), delims.cend(),
53 [&output](std::string::const_iterator first, std::string::const_iterator second) {
55 output.emplace_back(first, second);
59void splitIgnoringWhitespaceKeepingEmptyTokens(
const std::string &str,
const std::string &delims,
60 std::vector<std::string> &output) {
62 for_each_token(str.cbegin(), str.cend(), delims.cbegin(), delims.cend(),
63 [&output](std::string::const_iterator first, std::string::const_iterator second) {
64 output.emplace_back(first, second);
65 Mantid::Kernel::Strings::stripInPlace(output.back());
69void splitIgnoringWhitespaceEmptyTokens(
const std::string &str,
const std::string &delims,
70 std::vector<std::string> &output) {
72 for_each_token(str.cbegin(), str.cend(), delims.cbegin(), delims.cend(),
73 [&output](std::string::const_iterator first, std::string::const_iterator second) {
74 if (first != second) {
75 output.emplace_back(first, second);
76 Mantid::Kernel::Strings::stripInPlace(output.back());
77 if (output.back().empty())
106 splitKeepingWhitespaceEmptyTokens(str, separators,
m_tokens);
107 addEmptyFinalToken(str, separators,
m_tokens);
110 splitKeepingWhitespaceIgnoringEmptyTokens(str, separators,
m_tokens);
113 splitIgnoringWhitespaceKeepingEmptyTokens(str, separators,
m_tokens);
114 addEmptyFinalToken(str, separators,
m_tokens);
117 splitIgnoringWhitespaceEmptyTokens(str, separators,
m_tokens);
120 splitKeepingWhitespaceEmptyTokens(str, separators,
m_tokens);
123 splitKeepingWhitespaceIgnoringEmptyTokens(str, separators,
m_tokens);
126 splitIgnoringWhitespaceKeepingEmptyTokens(str, separators,
m_tokens);
129 splitIgnoringWhitespaceEmptyTokens(str, separators,
m_tokens);
134 throw std::runtime_error(
"Invalid option passed to Mantid::Kernel::StringTokenizer:" +
std::to_string(options));
@ TOK_IGNORE_FINAL_EMPTY_TOKEN
ignore an empty token at the end of the string.
@ TOK_IGNORE_EMPTY
ignore empty tokens
@ TOK_TRIM
remove leading and trailing whitespace from tokens
std::vector< std::string > m_tokens
StringTokenizer()=default
Constructs an object from an empty string.
std::string to_string(const wide_integer< Bits, Signed > &n)