diff options
Diffstat (limited to 'src/libutil')
-rw-r--r-- | src/libutil/config.cc | 15 | ||||
-rw-r--r-- | src/libutil/config.hh | 8 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/libutil/config.cc b/src/libutil/config.cc index 9023cb1bb..7551d97d1 100644 --- a/src/libutil/config.cc +++ b/src/libutil/config.cc @@ -154,6 +154,11 @@ AbstractSetting::AbstractSetting( { } +void AbstractSetting::setDefault(const std::string & str) +{ + if (!overriden) set(str); +} + void AbstractSetting::toJSON(JSONPlaceholder & out) { out.write(to_string()); @@ -185,7 +190,7 @@ template<> void BaseSetting<std::string>::set(const std::string & str) value = str; } -template<> std::string BaseSetting<std::string>::to_string() +template<> std::string BaseSetting<std::string>::to_string() const { return value; } @@ -199,7 +204,7 @@ void BaseSetting<T>::set(const std::string & str) } template<typename T> -std::string BaseSetting<T>::to_string() +std::string BaseSetting<T>::to_string() const { static_assert(std::is_integral<T>::value, "Integer required."); return std::to_string(value); @@ -215,7 +220,7 @@ template<> void BaseSetting<bool>::set(const std::string & str) throw UsageError("Boolean setting '%s' has invalid value '%s'", name, str); } -template<> std::string BaseSetting<bool>::to_string() +template<> std::string BaseSetting<bool>::to_string() const { return value ? "true" : "false"; } @@ -239,7 +244,7 @@ template<> void BaseSetting<Strings>::set(const std::string & str) value = tokenizeString<Strings>(str); } -template<> std::string BaseSetting<Strings>::to_string() +template<> std::string BaseSetting<Strings>::to_string() const { return concatStringsSep(" ", value); } @@ -256,7 +261,7 @@ template<> void BaseSetting<StringSet>::set(const std::string & str) value = tokenizeString<StringSet>(str); } -template<> std::string BaseSetting<StringSet>::to_string() +template<> std::string BaseSetting<StringSet>::to_string() const { return concatStringsSep(" ", value); } diff --git a/src/libutil/config.hh b/src/libutil/config.hh index d86c65ff0..7ea78fdaf 100644 --- a/src/libutil/config.hh +++ b/src/libutil/config.hh @@ -115,6 +115,8 @@ public: bool overriden = false; + void setDefault(const std::string & str); + protected: AbstractSetting( @@ -131,13 +133,13 @@ protected: virtual void set(const std::string & value) = 0; - virtual std::string to_string() = 0; + virtual std::string to_string() const = 0; virtual void toJSON(JSONPlaceholder & out); virtual void convertToArg(Args & args, const std::string & category); - bool isOverriden() { return overriden; } + bool isOverriden() const { return overriden; } }; /* A setting of type T. */ @@ -174,7 +176,7 @@ public: value = v; } - std::string to_string() override; + std::string to_string() const override; void convertToArg(Args & args, const std::string & category) override; |