|
|
@@ -65,15 +65,7 @@ template <typename Impl> auto Arguments<Impl>::Flag::operator=(bool && value) {
|
|
|
|
|
|
template <typename Impl> bool Arguments<Impl>::Flag::primed(bool inv) const {
|
|
|
if (self->primed_) { return self->flags.count(name); }
|
|
|
- std::vector<std::string> aliases{"--" + name};
|
|
|
- if (abbrev) { aliases.emplace_back(std::string{'-', abbrev}); }
|
|
|
- if (inv) { aliases.emplace_back("--no-" + name); };
|
|
|
- for (auto & alias : aliases) {
|
|
|
- if (!self->option_names.emplace(alias, name).second) {
|
|
|
- throw ArgumentStructureError("Duplicate option string", alias);
|
|
|
- }
|
|
|
- }
|
|
|
- self->option_descriptions.emplace(join("/", aliases), description);
|
|
|
+ self->add_options(name, abbrev, description, std::vector(inv, "no-" + name));
|
|
|
self->flag_names.emplace(name);
|
|
|
return false;
|
|
|
}
|
|
|
@@ -100,14 +92,7 @@ auto Arguments<Impl>::Option::operator=(T && value) {
|
|
|
|
|
|
template <typename Impl> bool Arguments<Impl>::Option::primed() const {
|
|
|
if (self->primed_) { return true; }
|
|
|
- std::vector<std::string> aliases{"--" + name};
|
|
|
- if (abbrev) { aliases.emplace_back(std::string{'-', abbrev}); }
|
|
|
- for (auto & alias : aliases) {
|
|
|
- if (!self->option_names.emplace(alias, name).second) {
|
|
|
- throw ArgumentStructureError("Duplicate option string", alias);
|
|
|
- }
|
|
|
- }
|
|
|
- self->option_descriptions.emplace(join("/", aliases), description);
|
|
|
+ self->add_options(name, abbrev, description);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@@ -172,6 +157,23 @@ template <typename Impl> void Arguments<Impl>::usage() const {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+template <typename Impl>
|
|
|
+void Arguments<Impl>::add_options(std::string const & name, char abbrev,
|
|
|
+ std::string const & description,
|
|
|
+ std::vector<std::string> aliases) {
|
|
|
+ for (auto & str : aliases) {
|
|
|
+ str = "--" + str;
|
|
|
+ }
|
|
|
+ aliases.push_back("--" + name);
|
|
|
+ if (abbrev) { aliases.push_back(std::string{'-', abbrev}); }
|
|
|
+ for (auto & str : aliases) {
|
|
|
+ if (!option_names.emplace(str, name).second) {
|
|
|
+ throw ArgumentStructureError("Duplicate option string", str);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ option_descriptions.emplace(join(",", aliases), description);
|
|
|
+}
|
|
|
+
|
|
|
template <typename Impl>
|
|
|
auto Arguments<Impl>::argument(size_t index, std::string const & name,
|
|
|
std::string const & description) {
|