aboutsummaryrefslogtreecommitdiff
path: root/args.hxx
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 /args.hxx
parentMerge pull request #68 from pavel-belikov/support-conan (diff)
downloadargs.hxx-2eb0f5f3f0cf2652f81ff5357c41528f56ae2668.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.
Diffstat (limited to 'args.hxx')
-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