count uses

This commit is contained in:
Jarryd Beck 2014-09-29 18:13:21 +10:00
parent 37122edba1
commit eb41b032df
2 changed files with 27 additions and 2 deletions

View File

@ -101,7 +101,8 @@ Options::parse(int& argc, char**& argv)
if (!value->has_arg()) if (!value->has_arg())
{ {
auto& v = m_parsed[name]; auto& v = m_parsed[name];
value->parse("", v); value->parse("", v.value);
++v.count;
} }
else else
{ {

View File

@ -154,6 +154,17 @@ namespace cxxopts
std::shared_ptr<const Value> m_parser; std::shared_ptr<const Value> m_parser;
}; };
struct ParsedOption
{
boost::any value;
int count;
ParsedOption()
: count(0)
{
}
};
class Options class Options
{ {
public: public:
@ -164,13 +175,26 @@ namespace cxxopts
OptionAdder OptionAdder
add_options(); add_options();
int
count(const std::string& o) const
{
auto iter = m_parsed.find(o);
if (iter == m_parsed.end())
{
return 0;
}
return iter->second.count;
}
private: private:
friend class OptionAdder; friend class OptionAdder;
std::map<std::string, std::shared_ptr<OptionDetails>> m_short; std::map<std::string, std::shared_ptr<OptionDetails>> m_short;
std::map<std::string, std::shared_ptr<OptionDetails>> m_long; std::map<std::string, std::shared_ptr<OptionDetails>> m_long;
std::map<std::string, boost::any> m_parsed; std::map<std::string, ParsedOption> m_parsed;
}; };
class OptionAdder class OptionAdder