cam: options: Add optionName() function to Option structure
Add an Option::optionName() function that returns a string describing the option name, with leading dashes. As a result, OptionsParser::parseValueError() function becomes a single-line function and can be inlined in its caller. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
@@ -100,6 +100,7 @@ struct Option {
|
||||
bool hasShortOption() const { return isalnum(opt); }
|
||||
bool hasLongOption() const { return name != nullptr; }
|
||||
const char *typeName() const;
|
||||
std::string optionName() const;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -125,6 +126,20 @@ const char *Option::typeName() const
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Retrieve a string describing the option name, with leading dashes
|
||||
* \return A string describing the option name, as a long option identifier
|
||||
* (double dash) if the option has a name, or a short option identifier (single
|
||||
* dash) otherwise
|
||||
*/
|
||||
std::string Option::optionName() const
|
||||
{
|
||||
if (name)
|
||||
return "--" + std::string(name);
|
||||
else
|
||||
return "-" + std::string(1, opt);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
* OptionBase<T>
|
||||
*/
|
||||
@@ -865,7 +880,9 @@ OptionsParser::Options OptionsParser::parse(int argc, char **argv)
|
||||
|
||||
const Option &option = *optionsMap_[c];
|
||||
if (!options.parseValue(c, option, optarg)) {
|
||||
parseValueError(option);
|
||||
std::cerr << "Can't parse " << option.typeName()
|
||||
<< " argument for option " << option.optionName()
|
||||
<< std::endl;
|
||||
usage();
|
||||
return options;
|
||||
}
|
||||
@@ -952,16 +969,3 @@ void OptionsParser::usage()
|
||||
option.keyValueParser->usage(indent);
|
||||
}
|
||||
}
|
||||
|
||||
void OptionsParser::parseValueError(const Option &option)
|
||||
{
|
||||
std::string optionName;
|
||||
|
||||
if (option.name)
|
||||
optionName = "--" + std::string(option.name);
|
||||
else
|
||||
optionName = "-" + std::string(1, option.opt);
|
||||
|
||||
std::cerr << "Can't parse " << option.typeName()
|
||||
<< " argument for option " << optionName << std::endl;
|
||||
}
|
||||
|
||||
@@ -95,8 +95,6 @@ public:
|
||||
void usage();
|
||||
|
||||
private:
|
||||
void parseValueError(const Option &option);
|
||||
|
||||
std::list<Option> options_;
|
||||
std::map<unsigned int, Option *> optionsMap_;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user