aboutsummaryrefslogtreecommitdiff
path: root/build2/utility.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'build2/utility.ixx')
-rw-r--r--build2/utility.ixx29
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)