parent
f0406578bd
commit
d74a2c65a5
@ -980,6 +980,42 @@ namespace cxxopts
|
||||
size_t m_count = 0;
|
||||
};
|
||||
|
||||
class KeyValue
|
||||
{
|
||||
public:
|
||||
KeyValue(std::string key, std::string value)
|
||||
: m_key(std::move(key))
|
||||
, m_value(std::move(value))
|
||||
{
|
||||
}
|
||||
|
||||
const
|
||||
std::string&
|
||||
key() const
|
||||
{
|
||||
return m_key;
|
||||
}
|
||||
|
||||
const std::string
|
||||
value() const
|
||||
{
|
||||
return m_value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T
|
||||
as() const
|
||||
{
|
||||
T result;
|
||||
values::parse_value(m_value, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string m_key;
|
||||
std::string m_value;
|
||||
};
|
||||
|
||||
class ParseResult
|
||||
{
|
||||
public:
|
||||
@ -1018,6 +1054,12 @@ namespace cxxopts
|
||||
return riter->second;
|
||||
}
|
||||
|
||||
const std::vector<KeyValue>&
|
||||
arguments() const
|
||||
{
|
||||
return m_sequential;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
OptionValue&
|
||||
@ -1059,6 +1101,8 @@ namespace cxxopts
|
||||
std::vector<std::string>::iterator m_next_positional;
|
||||
std::unordered_set<std::string> m_positional_set;
|
||||
std::unordered_map<std::shared_ptr<OptionDetails>, OptionValue> m_results;
|
||||
|
||||
std::vector<KeyValue> m_sequential;
|
||||
};
|
||||
|
||||
class Options
|
||||
@ -1386,6 +1430,8 @@ ParseResult::parse_option
|
||||
{
|
||||
auto& result = m_results[value];
|
||||
result.parse(value, arg);
|
||||
|
||||
m_sequential.emplace_back(value->long_name(), arg);
|
||||
}
|
||||
|
||||
inline
|
||||
|
@ -82,6 +82,16 @@ TEST_CASE("Basic options", "[options]")
|
||||
CHECK(result.count("6") == 1);
|
||||
CHECK(result.count("p") == 2);
|
||||
CHECK(result.count("space") == 2);
|
||||
|
||||
auto& arguments = result.arguments();
|
||||
REQUIRE(arguments.size() == 7);
|
||||
CHECK(arguments[0].key() == "long");
|
||||
CHECK(arguments[0].value() == "");
|
||||
CHECK(arguments[0].as<bool>() == true);
|
||||
|
||||
CHECK(arguments[1].key() == "short");
|
||||
CHECK(arguments[2].key() == "value");
|
||||
CHECK(arguments[3].key() == "av");
|
||||
}
|
||||
|
||||
TEST_CASE("Short options", "[options]")
|
||||
|
Loading…
Reference in New Issue
Block a user