aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTaylor C. Richberger <taywee@gmx.com>2019-01-11 10:48:17 -0700
committerTaylor C. Richberger <taywee@gmx.com>2019-01-11 10:49:18 -0700
commit2eb0f5f3f0cf2652f81ff5357c41528f56ae2668 (patch)
tree3b0f09e55ac62b058e311e7fe694247e350ae25e
parentMerge pull request #68 from pavel-belikov/support-conan (diff)
downloadargs.hxx-6.2.1.tar.xz
fix default args for extra types6.2.1
Many types were not storing their default arguments, and reset was simply clearing them. This was obviously not the right behavior.
-rw-r--r--args.hxx56
1 files changed, 44 insertions, 12 deletions
diff --git a/args.hxx b/args.hxx
index 548162b..1eb8da8 100644
--- a/args.hxx
+++ b/args.hxx
@@ -3414,6 +3414,7 @@ namespace args
protected:
List<T> values;
+ const List<T> defaultValues;
Nargs nargs;
Reader reader;
@@ -3434,7 +3435,7 @@ namespace args
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
NargsValueFlag(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, Nargs nargs_, const List<T> &defaultValues_ = {}, Options options_ = {})
- : FlagBase(name_, help_, std::move(matcher_), options_), values(defaultValues_), nargs(nargs_)
+ : FlagBase(name_, help_, std::move(matcher_), options_), values(defaultValues_), defaultValues(defaultValues_),nargs(nargs_)
{
group_.Add(*this);
}
@@ -3499,6 +3500,12 @@ namespace args
{
return values.cend();
}
+
+ virtual void Reset() noexcept override
+ {
+ FlagBase::Reset();
+ values = defaultValues;
+ }
};
/** An argument-accepting flag class that pushes the found values into a list
@@ -3516,6 +3523,7 @@ namespace args
private:
using Container = List<T>;
Container values;
+ const Container defaultValues;
Reader reader;
public:
@@ -3534,7 +3542,7 @@ namespace args
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
ValueFlagList(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, const Container &defaultValues_ = Container(), Options options_ = {}):
- ValueFlagBase(name_, help_, std::move(matcher_), options_), values(defaultValues_)
+ ValueFlagBase(name_, help_, std::move(matcher_), options_), values(defaultValues_), defaultValues(defaultValues_)
{
group_.Add(*this);
}
@@ -3572,7 +3580,7 @@ namespace args
virtual void Reset() noexcept override
{
ValueFlagBase::Reset();
- values.clear();
+ values = defaultValues;
}
iterator begin() noexcept
@@ -3623,6 +3631,7 @@ namespace args
private:
const Map<K, T> map;
T value;
+ const T defaultValue;
Reader reader;
protected:
@@ -3633,7 +3642,7 @@ namespace args
public:
- MapFlag(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, const Map<K, T> &map_, const T &defaultValue_, Options options_): ValueFlagBase(name_, help_, std::move(matcher_), options_), map(map_), value(defaultValue_)
+ MapFlag(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, const Map<K, T> &map_, const T &defaultValue_, Options options_): ValueFlagBase(name_, help_, std::move(matcher_), options_), map(map_), value(defaultValue_), defaultValue(defaultValue_)
{
group_.Add(*this);
}
@@ -3684,6 +3693,12 @@ namespace args
{
return value;
}
+
+ virtual void Reset() noexcept override
+ {
+ ValueFlagBase::Reset();
+ value = defaultValue;
+ }
};
/** A mapping value flag list class
@@ -3706,6 +3721,7 @@ namespace args
using Container = List<T>;
const Map<K, T> map;
Container values;
+ const Container defaultValues;
Reader reader;
protected:
@@ -3728,7 +3744,7 @@ namespace args
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- MapFlagList(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, const Map<K, T> &map_, const Container &defaultValues_ = Container()): ValueFlagBase(name_, help_, std::move(matcher_)), map(map_), values(defaultValues_)
+ MapFlagList(Group &group_, const std::string &name_, const std::string &help_, Matcher &&matcher_, const Map<K, T> &map_, const Container &defaultValues_ = Container()): ValueFlagBase(name_, help_, std::move(matcher_)), map(map_), values(defaultValues_), defaultValues(defaultValues_)
{
group_.Add(*this);
}
@@ -3780,7 +3796,7 @@ namespace args
virtual void Reset() noexcept override
{
ValueFlagBase::Reset();
- values.clear();
+ values = defaultValues;
}
iterator begin() noexcept
@@ -3826,9 +3842,10 @@ namespace args
{
private:
T value;
+ const T defaultValue;
Reader reader;
public:
- Positional(Group &group_, const std::string &name_, const std::string &help_, const T &defaultValue_ = T(), Options options_ = {}): PositionalBase(name_, help_, options_), value(defaultValue_)
+ Positional(Group &group_, const std::string &name_, const std::string &help_, const T &defaultValue_ = T(), Options options_ = {}): PositionalBase(name_, help_, options_), value(defaultValue_), defaultValue(defaultValue_)
{
group_.Add(*this);
}
@@ -3859,6 +3876,12 @@ namespace args
{
return value;
}
+
+ virtual void Reset() noexcept override
+ {
+ PositionalBase::Reset();
+ value = defaultValue;
+ }
};
/** A positional argument class that pushes the found values into a list
@@ -3876,6 +3899,7 @@ namespace args
private:
using Container = List<T>;
Container values;
+ const Container defaultValues;
Reader reader;
public:
@@ -3892,7 +3916,7 @@ namespace args
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- PositionalList(Group &group_, const std::string &name_, const std::string &help_, const Container &defaultValues_ = Container(), Options options_ = {}): PositionalBase(name_, help_, options_), values(defaultValues_)
+ PositionalList(Group &group_, const std::string &name_, const std::string &help_, const Container &defaultValues_ = Container(), Options options_ = {}): PositionalBase(name_, help_, options_), values(defaultValues_), defaultValues(defaultValues_)
{
group_.Add(*this);
}
@@ -3933,7 +3957,7 @@ namespace args
virtual void Reset() noexcept override
{
PositionalBase::Reset();
- values.clear();
+ values = defaultValues;
}
iterator begin() noexcept
@@ -3984,6 +4008,7 @@ namespace args
private:
const Map<K, T> map;
T value;
+ const T defaultValue;
Reader reader;
protected:
@@ -3995,7 +4020,7 @@ namespace args
public:
MapPositional(Group &group_, const std::string &name_, const std::string &help_, const Map<K, T> &map_, const T &defaultValue_ = T(), Options options_ = {}):
- PositionalBase(name_, help_, options_), map(map_), value(defaultValue_)
+ PositionalBase(name_, help_, options_), map(map_), value(defaultValue_), defaultValue(defaultValue_)
{
group_.Add(*this);
}
@@ -4038,6 +4063,12 @@ namespace args
{
return value;
}
+
+ virtual void Reset() noexcept override
+ {
+ PositionalBase::Reset();
+ value = defaultValue;
+ }
};
/** A positional argument mapping list class
@@ -4061,6 +4092,7 @@ namespace args
const Map<K, T> map;
Container values;
+ const Container defaultValues;
Reader reader;
protected:
@@ -4084,7 +4116,7 @@ namespace args
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
MapPositionalList(Group &group_, const std::string &name_, const std::string &help_, const Map<K, T> &map_, const Container &defaultValues_ = Container(), Options options_ = {}):
- PositionalBase(name_, help_, options_), map(map_), values(defaultValues_)
+ PositionalBase(name_, help_, options_), map(map_), values(defaultValues_), defaultValues(defaultValues_)
{
group_.Add(*this);
}
@@ -4135,7 +4167,7 @@ namespace args
virtual void Reset() noexcept override
{
PositionalBase::Reset();
- values.clear();
+ values = defaultValues;
}
iterator begin() noexcept