diff options
Diffstat (limited to 'build2/utility.ixx')
-rw-r--r-- | build2/utility.ixx | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/build2/utility.ixx b/build2/utility.ixx index 04ba9f5..596eb78 100644 --- a/build2/utility.ixx +++ b/build2/utility.ixx @@ -4,6 +4,35 @@ namespace build2 { + inline size_t + next_word (const string& s, size_t& b, size_t& e, char d1, char d2) + { + return next_word (s, s.size (), b, e, d1, d2); + } + + inline size_t + next_word (const string& s, size_t n, size_t& b, size_t& e, char d1, char d2) + { + if (b != e) + b = e; + + // Skip leading delimiters. + // + for (; b != n && (s[b] == d1 || s[b] == d2); ++b) ; + + if (b == n) + { + e = n; + return 0; + } + + // Find first trailing delimiter. + // + for (e = b + 1; e != n && s[e] != d1 && s[e] != d2; ++e) ; + + return e - b; + } + template <typename T> inline void append_options (cstrings& args, T& s, const char* var) |