summaryrefslogtreecommitdiff
path: root/src/parameters_parser.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2014-02-08 01:02:58 +0000
committerMaxime Coste <frrrwww@gmail.com>2014-03-02 01:08:11 +0000
commit7f9f887b4a01e63926880745ff78a4874ecd502c (patch)
treea30c45b94124f11614bada727048d3ca2cd61d36 /src/parameters_parser.hh
parent92c425ad520a41b9f5e541fa5e317be739d94434 (diff)
All commands now take directly a parameter parser
The command parameters description are now stored in a ParameterDesc structure.
Diffstat (limited to 'src/parameters_parser.hh')
-rw-r--r--src/parameters_parser.hh38
1 files changed, 24 insertions, 14 deletions
diff --git a/src/parameters_parser.hh b/src/parameters_parser.hh
index 2230e3f2..6b82bd8d 100644
--- a/src/parameters_parser.hh
+++ b/src/parameters_parser.hh
@@ -36,12 +36,7 @@ struct wrong_argument_count : public parameter_error
using OptionMap = std::unordered_map<String, bool>;
-// ParameterParser provides tools to parse command parameters.
-// There are 3 types of parameters:
-// * unnamed options, which are accessed by position (ignoring named ones)
-// * named boolean options, which are enabled using '-name' syntax
-// * named string options, which are defined using '-name value' syntax
-struct ParametersParser
+struct ParameterDesc
{
enum class Flags
{
@@ -57,14 +52,29 @@ struct ParametersParser
return ((int) lhs & (int) rhs) != 0;
}
+ ParameterDesc() = default;
+ ParameterDesc(OptionMap options, Flags flags = Flags::None,
+ size_t min_positionals = 0, size_t max_positionals = -1)
+ : options(std::move(options)), flags(flags),
+ min_positionals(min_positionals), max_positionals(max_positionals) {}
+
+ OptionMap options;
+ Flags flags = Flags::None;
+ size_t min_positionals = 0;
+ size_t max_positionals = -1;
+};
+
+// ParametersParser provides tools to parse command parameters.
+// There are 3 types of parameters:
+// * unnamed options, which are accessed by position (ignoring named ones)
+// * named boolean options, which are enabled using '-name' syntax
+// * named string options, which are defined using '-name value' syntax
+struct ParametersParser
+{
// the options defines named options, if they map to true, then
// they are understood as string options, else they are understood as
// boolean option.
- ParametersParser(const ParameterList& params,
- OptionMap options,
- Flags flags = Flags::None,
- size_t min_positionals = 0,
- size_t max_positionals = -1);
+ ParametersParser(ParameterList params, const ParameterDesc& desc);
// check if a named option (either string or boolean) is specified
bool has_option(const String& name) const;
@@ -131,9 +141,9 @@ struct ParametersParser
iterator end() const;
private:
- ParameterList m_params;
- std::vector<size_t> m_positional_indices;
- std::unordered_map<String, bool> m_options;
+ ParameterList m_params;
+ std::vector<size_t> m_positional_indices;
+ const ParameterDesc& m_desc;
};
}