From e5a571d28f5ae7d78871ffdd16285aca9188ef83 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 2 Aug 2019 13:07:57 +0200 Subject: Regenerate options parsing code --- build2/b-options.cxx | 3 ++- build2/b-options.hxx | 9 +++++++++ build2/b-options.ixx | 29 +++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) (limited to 'build2') diff --git a/build2/b-options.cxx b/build2/b-options.cxx index a7a348f..4c8e63b 100644 --- a/build2/b-options.cxx +++ b/build2/b-options.cxx @@ -216,6 +216,8 @@ namespace build2 // argv_file_scanner // + int argv_file_scanner::zero_argc_ = 0; + bool argv_file_scanner:: more () { @@ -462,7 +464,6 @@ namespace build2 using namespace std; const char* o (s.next ()); - if (s.more ()) { string v (s.next ()); diff --git a/build2/b-options.hxx b/build2/b-options.hxx index c745025..3e10901 100644 --- a/build2/b-options.hxx +++ b/build2/b-options.hxx @@ -298,6 +298,9 @@ namespace build2 const std::string& option, bool erase = false); + argv_file_scanner (const std::string& file, + const std::string& option); + struct option_info { // If search_func is not NULL, it is called, with the arg @@ -322,6 +325,10 @@ namespace build2 std::size_t options_count, bool erase = false); + argv_file_scanner (const std::string& file, + const option_info* options = 0, + std::size_t options_count = 0); + virtual bool more (); @@ -356,6 +363,8 @@ namespace build2 std::size_t i_; bool skip_; + + static int zero_argc_; }; template diff --git a/build2/b-options.ixx b/build2/b-options.ixx index 9b7a8ad..a8dd01c 100644 --- a/build2/b-options.ixx +++ b/build2/b-options.ixx @@ -196,6 +196,22 @@ namespace build2 } inline argv_file_scanner:: + argv_file_scanner (const std::string& file, + const std::string& option) + : argv_scanner (0, zero_argc_, 0), + option_ (option), + options_ (&option_info_), + options_count_ (1), + i_ (1), + skip_ (false) + { + option_info_.option = option_.c_str (); + option_info_.search_func = 0; + + load (file); + } + + inline argv_file_scanner:: argv_file_scanner (int& argc, char** argv, const option_info* options, @@ -223,6 +239,19 @@ namespace build2 skip_ (false) { } + + inline argv_file_scanner:: + argv_file_scanner (const std::string& file, + const option_info* options, + std::size_t options_count) + : argv_scanner (0, zero_argc_, 0), + options_ (options), + options_count_ (options_count), + i_ (1), + skip_ (false) + { + load (file); + } } } -- cgit v1.1