aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Krupcale <mkrupcale@matthewkrupcale.com>2020-08-09 09:37:19 -0400
committerMatthew Krupcale <mkrupcale@matthewkrupcale.com>2020-08-10 15:04:02 -0400
commit1276a28b88295caf27c5df97d2e61b28feed3999 (patch)
treed99cde6956c9c779683db7b49c9987e61d941bdd
parent18a458e37b454e3d2cd475543d1a60887ddb2e97 (diff)
Add iterator-based versions of find_option{,_prefix}
This allows one to use all of the properties of iterators to manipulate the found option.
-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,