Skip to content

Commit

Permalink
Change the API of the hitherto unused Cvar::Modified a bit and fix so…
Browse files Browse the repository at this point in the history
…me template errors.
  • Loading branch information
slipher authored and slipher committed Apr 19, 2018
1 parent a6bfab1 commit 520f08d
Showing 1 changed file with 19 additions and 18 deletions.
37 changes: 19 additions & 18 deletions src/common/Cvar.h
Expand Up @@ -169,22 +169,22 @@ namespace Cvar {

/*
* Modified<CvarType> allow to query atomically if the cvar has been modified and the new value.
* (resets the modified flag to false)
* (GetModifiedValue() resets the modified flag to false.)
* The modified flag is set to true on construction (before the cvar has been read the first time).
*/

template<typename Base> class Modified : public Base {
public:
using value_type = typename Base::value_type;

template<typename ... Args>
Modified(std::string name, std::string description, int flags, value_type defaultValue, Args ... args);
Modified(std::string name, std::string description, int flags, value_type defaultValue, Args&& ... args);
template<typename ... Args>
Modified(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, Args ... args);
Modified(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, Args&& ... args);

virtual OnValueChangedResult OnValueChanged(Str::StringRef newValue);

//TODO change it when we have optional
bool GetModifiedValue(value_type& value);
Util::optional<value_type> GetModifiedValue();

private:
bool modified;
Expand All @@ -199,9 +199,9 @@ namespace Cvar {
using value_type = typename Base::value_type;

template<typename ... Args>
Range(std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args ... args);
Range(std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args&& ... args);
template<typename ... Args>
Range(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args ... args);
Range(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args&& ... args);

private:
virtual OnValueChangedResult Validate(const value_type& value);
Expand Down Expand Up @@ -348,15 +348,15 @@ namespace Cvar {

template <typename Base>
template <typename ... Args>
Modified<Base>::Modified(std::string name, std::string description, int flags, value_type defaultValue, Args ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), modified(false) {
Modified<Base>::Modified(std::string name, std::string description, int flags, typename Modified<Base>::value_type defaultValue, Args&& ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), modified(true) {
Cvar<value_type>::Register();
}

template <typename Base>
template <typename ... Args>
Modified<Base>::Modified(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, Args ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), modified(false) {
Modified<Base>::Modified(NoRegisterTag, std::string name, std::string description, int flags, typename Modified<Base>::value_type defaultValue, Args&& ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), modified(true) {
}

template <typename Base>
Expand All @@ -370,25 +370,26 @@ namespace Cvar {
}

template<typename Base>
bool Modified<Base>::GetModifiedValue(value_type& value) {
value = this->Get();
bool res = modified;
modified = false;
return res;
Util::optional<typename Modified<Base>::value_type> Modified<Base>::GetModifiedValue() {
if (modified) {
modified = false;
return {this->Get()};
}
return Util::nullopt;
}

// Range<Base>

template <typename Base>
template <typename ... Args>
Range<Base>::Range(std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args ... args)
Range<Base>::Range(std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args&& ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), min(min), max(max) {
Cvar<value_type>::Register();
}

template <typename Base>
template <typename ... Args>
Range<Base>::Range(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args ... args)
Range<Base>::Range(NoRegisterTag, std::string name, std::string description, int flags, value_type defaultValue, value_type min, value_type max, Args&& ... args)
: Base(NoRegisterTag(), std::move(name), std::move(description), flags, std::move(defaultValue), std::forward<Args>(args) ...), min(min), max(max) {
}

Expand Down

0 comments on commit 520f08d

Please sign in to comment.