[libcamera-devel] [RFC 3/4] cam: options: Add parsing of multiple instances of the same option
Niklas Söderlund
niklas.soderlund at ragnatech.se
Fri Mar 22 02:53:48 CET 2019
Add the ability to allow storing multiple instances of the same option.
Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
src/cam/options.cpp | 12 ++++++------
src/cam/options.h | 5 +++--
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/cam/options.cpp b/src/cam/options.cpp
index 7995a9b359764ec7..e9dcd0c39cdc50ce 100644
--- a/src/cam/options.cpp
+++ b/src/cam/options.cpp
@@ -96,7 +96,7 @@ bool OptionsBase<T>::parseValue(const T &opt, const Option &option,
break;
}
- values_[opt] = value;
+ values_[opt] = option.array ? OptionValue(value, values_[opt]) : value;
return true;
}
@@ -128,7 +128,7 @@ bool KeyValueParser::addOption(const char *name, OptionType type,
return false;
optionsMap_[name] = Option({ 0, type, name, argument, nullptr,
- help, nullptr });
+ help, nullptr, false });
return true;
}
@@ -338,7 +338,7 @@ std::vector<OptionValue> OptionValue::toArray() const
bool OptionsParser::addOption(int opt, OptionType type, const char *help,
const char *name, OptionArgument argument,
- const char *argumentName)
+ const char *argumentName, bool array)
{
/*
* Options must have at least a short or long name, and a text message.
@@ -356,16 +356,16 @@ bool OptionsParser::addOption(int opt, OptionType type, const char *help,
return false;
options_.push_back(Option({ opt, type, name, argument, argumentName,
- help, nullptr }));
+ help, nullptr, array }));
optionsMap_[opt] = &options_.back();
return true;
}
bool OptionsParser::addOption(int opt, KeyValueParser *parser, const char *help,
- const char *name)
+ const char *name, bool array)
{
if (!addOption(opt, OptionKeyValue, help, name, ArgumentRequired,
- "key=value[,key=value,...]"))
+ "key=value[,key=value,...]", array))
return false;
options_.back().keyValueParser = parser;
diff --git a/src/cam/options.h b/src/cam/options.h
index 789ba36187dd1fc3..922db4650b49117d 100644
--- a/src/cam/options.h
+++ b/src/cam/options.h
@@ -36,6 +36,7 @@ struct Option {
const char *argumentName;
const char *help;
KeyValueParser *keyValueParser;
+ bool array;
bool hasShortOption() const { return isalnum(opt); }
bool hasLongOption() const { return name != nullptr; }
@@ -125,9 +126,9 @@ public:
bool addOption(int opt, OptionType type, const char *help,
const char *name = nullptr,
OptionArgument argument = ArgumentNone,
- const char *argumentName = nullptr);
+ const char *argumentName = nullptr, bool array = false);
bool addOption(int opt, KeyValueParser *parser, const char *help,
- const char *name = nullptr);
+ const char *name = nullptr, bool array = false);
Options parse(int argc, char *argv[]);
void usage();
--
2.21.0
More information about the libcamera-devel
mailing list