Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions argparse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ class ArgumentParser {
}

struct Argument {
Argument() : short_name(""), name(""), optional(true), fixed_nargs(0), fixed(true) {}
Argument() : short_name(""), name(""), optional(true), fixed_nargs(0), fixed(true), used(false) {}
Argument(const String& _short_name, const String& _name, bool _optional, char nargs)
: short_name(_short_name), name(_name), optional(_optional) {
: short_name(_short_name), name(_name), optional(_optional), used(false) {
if (nargs == '+' || nargs == '*') {
variable_nargs = nargs;
fixed = false;
Expand All @@ -153,6 +153,7 @@ class ArgumentParser {
String short_name;
String name;
bool optional;
bool used;
union {
size_t fixed_nargs;
char variable_nargs;
Expand Down Expand Up @@ -301,6 +302,8 @@ class ArgumentParser {
.append(active_name),
true);
active = arguments_[index_[el]];
arguments_[index_[el]].used = true;

// check if we've satisfied the required arguments
if (active.optional && nrequired > 0)
argumentError(String("encountered optional argument ")
Expand Down Expand Up @@ -416,7 +419,10 @@ class ArgumentParser {
arguments_.clear();
variables_.clear();
}
bool exists(const String& name) const { return index_.count(delimit(name)) > 0; }
bool exists(const String& name) const {
auto it = index_.find(delimit(name));
return (it != index_.end()) && (arguments_[it->second].used);
}
size_t count(const String& name) {
// check if the name is an argument
if (index_.count(delimit(name)) == 0) return 0;
Expand Down