lng(l),
arg_type(a),
seen_count(0),
+ ext_seen_count(0),
metavar("ARG")
{
if(lng.empty())
return *this;
}
+GetOpt::OptBase &GetOpt::OptBase::bind_seen_count(unsigned &c)
+{
+ ext_seen_count = &c;
+ return *this;
+}
+
void GetOpt::OptBase::process()
{
if(arg_type==REQUIRED_ARG)
throw usage_error("--"+lng+" requires an argument");
++seen_count;
+ if(ext_seen_count)
+ *ext_seen_count = seen_count;
store();
}
if(arg_type==NO_ARG)
throw usage_error("--"+lng+" takes no argument");
++seen_count;
+ if(ext_seen_count)
+ *ext_seen_count = seen_count;
store(arg);
}
metavariable is used to denote the argument in the option list. */
virtual Option &set_help(const std::string &, const std::string &) = 0;
+ virtual Option &bind_seen_count(unsigned &) = 0;
+
/// Returns the number of times this option was seen on the command line.
virtual unsigned get_seen_count() const = 0;
};
std::string lng;
ArgType arg_type;
unsigned seen_count;
+ unsigned *ext_seen_count;
std::string help;
std::string metavar;
virtual OptBase &set_help(const std::string &);
virtual OptBase &set_help(const std::string &, const std::string &);
+ virtual OptBase &bind_seen_count(unsigned &);
char get_short() const { return shrt; }
const std::string &get_long() const { return lng; }
ArgType get_arg_type() const { return arg_type; }