Browse Source

Util: Support for optional arguments in ArgParser

master
Riyyi 3 years ago
parent
commit
b6bfcbdc33
  1. 31
      src/util/argparser.cpp

31
src/util/argparser.cpp

@ -191,20 +191,29 @@ bool ArgParser::parseLongOption(std::string_view option, std::string_view next)
bool ArgParser::parseArgument(std::string_view argument) bool ArgParser::parseArgument(std::string_view argument)
{ {
// No handler for argument bool result = true;
if (m_argumentIndex >= m_arguments.size()) {
return false;
}
Argument& currentArgument = m_arguments.at(m_argumentIndex); for (;;) {
bool result = currentArgument.acceptValue(argument.data()); // Run out of argument handlers
if (m_argumentIndex >= m_arguments.size()) {
return false;
}
if (result) { Argument& currentArgument = m_arguments.at(m_argumentIndex);
currentArgument.addedValues++; result = currentArgument.acceptValue(argument.data());
}
if (result) {
currentArgument.addedValues++;
if (currentArgument.addedValues >= currentArgument.maxValues) {
m_argumentIndex++;
}
}
else if (currentArgument.minValues == 0) {
m_argumentIndex++;
continue;
}
if (currentArgument.addedValues >= currentArgument.maxValues) { break;
m_argumentIndex++;
} }
return result; return result;

Loading…
Cancel
Save