aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2')
-rw-r--r--libbuild2/utility.hxx8
-rw-r--r--libbuild2/utility.ixx24
2 files changed, 32 insertions, 0 deletions
diff --git a/libbuild2/utility.hxx b/libbuild2/utility.hxx
index 7a6ada2..67c46d9 100644
--- a/libbuild2/utility.hxx
+++ b/libbuild2/utility.hxx
@@ -649,6 +649,10 @@ namespace build2
const char* variable,
bool ignore_case = false);
+ template <typename I>
+ I
+ find_option (const char* option, I begin, I end, bool ignore_case = false);
+
LIBBUILD2_SYMEXPORT bool
find_option (const char* option, const lookup&, bool ignore_case = false);
@@ -702,6 +706,10 @@ namespace build2
const string*
find_option_prefix (const char* prefix, T&, const char*, bool = false);
+ template <typename I>
+ I
+ find_option_prefix (const char* prefix, I rbegin, I rend, bool ignore_case = false);
+
LIBBUILD2_SYMEXPORT const string*
find_option_prefix (const char* prefix, const lookup&, bool = false);
diff --git a/libbuild2/utility.ixx b/libbuild2/utility.ixx
index da9f58b..dc8b42a 100644
--- a/libbuild2/utility.ixx
+++ b/libbuild2/utility.ixx
@@ -139,6 +139,17 @@ namespace build2
return find_option (o, s[var], ic);
}
+ template <typename I>
+ I
+ find_option (const char* o, I b, I e, bool ic)
+ {
+ for (; b != e; ++b)
+ if ((ic ? icasecmp (*b, o) : strcmp (*b, o)) == 0)
+ return b;
+
+ return e;
+ }
+
template <typename T>
inline bool
find_options (const initializer_list<const char*>& os,
@@ -173,6 +184,19 @@ namespace build2
return find_option_prefix (p, s[var], ic);
}
+ template <typename I>
+ I
+ find_option_prefix (const char* p, I rb, I re, bool ic)
+ {
+ size_t n (strlen (p));
+
+ for (; rb != re; ++rb)
+ if ((ic ? icasecmp (*rb, p, n) : strncmp (*rb, p, n)) == 0)
+ return rb;
+
+ return re;
+ }
+
template <typename T>
inline const string*
find_option_prefixes (const initializer_list<const char*>& ps,