From 17fcb0dd9df705f3b3f25283fdddee8fcb31f52b Mon Sep 17 00:00:00 2001 From: azeteg Date: Tue, 20 Feb 2018 17:56:46 +0100 Subject: [PATCH] Update argparse.hpp --- argparse.hpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/argparse.hpp b/argparse.hpp index e62ea15..8cce157 100644 --- a/argparse.hpp +++ b/argparse.hpp @@ -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; @@ -153,6 +153,7 @@ class ArgumentParser { String short_name; String name; bool optional; + bool used; union { size_t fixed_nargs; char variable_nargs; @@ -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 ") @@ -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;