aboutsummaryrefslogtreecommitdiff
path: root/build2/utility.ixx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-03-07 12:29:50 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-03-07 12:29:50 +0200
commitb7c0293598d45f052a41c3ed6580d98801280cd7 (patch)
tree19f519f8ebf4e9da6db31eed54ba8e8ee778907d /build2/utility.ixx
parent6fa958ee23d0beb62f687d3d9137c774b4960197 (diff)
Implement compiler guessing, including icc and msvc
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)