RVars: Set "defaults" to the value provided by the constructor

Fixes an issue where all default keys are null when preloading cathook. Loading a config would've unbinded all keys.
This commit is contained in:
TotallyNotElite 2019-10-26 15:36:14 +02:00
parent a6462dd26f
commit e9b9cf16b1
4 changed files with 26 additions and 2 deletions

View File

@ -30,6 +30,7 @@ public:
struct VariableDescriptor
{
explicit VariableDescriptor(IVariable &variable);
VariableDescriptor(IVariable &variable, std::string value);
bool isChanged();
@ -42,8 +43,9 @@ public:
public:
void add(IVariable &me, std::string name);
void add(IVariable &me, std::string name, std::string value);
IVariable *lookup(const std::string &string);
std::unordered_map<std::string, VariableDescriptor> registered{};
};
} // namespace settings
} // namespace settings

View File

@ -10,6 +10,7 @@ namespace settings
{
void registerVariable(IVariable &variable, std::string name);
void registerVariable(IVariable &variable, std::string name, std::string value);
template <typename T> class RegisteredVariableProxy : public Variable<T>
{
@ -24,7 +25,7 @@ public:
RegisteredVariableProxy(std::string name, std::string value)
{
this->fromString(value);
registerVariable(*this, name);
registerVariable(*this, name, value);
}
};

View File

@ -24,6 +24,16 @@ void Manager::add(IVariable &me, std::string name)
registered.emplace(name, me);
}
void Manager::add(IVariable &me, std::string name, std::string value)
{
if (registered.find(name) != registered.end())
{
logging::Info(("Double registering variable: " + name).c_str());
throw std::runtime_error("Double registering variable: " + name);
}
registered.emplace(name, Manager::VariableDescriptor{ me, value });
}
IVariable *Manager::lookup(const std::string &string)
{
auto it = registered.find(string);
@ -38,6 +48,12 @@ Manager::VariableDescriptor::VariableDescriptor(IVariable &variable) : variable(
defaults = variable.toString();
}
Manager::VariableDescriptor::VariableDescriptor(IVariable &variable, std::string value) : variable(variable)
{
type = variable.getType();
defaults = value;
}
bool Manager::VariableDescriptor::isChanged()
{
return variable.toString() != defaults;

View File

@ -8,3 +8,8 @@ void settings::registerVariable(IVariable &variable, std::string name)
{
Manager::instance().add(variable, name);
}
void settings::registerVariable(IVariable &variable, std::string name, std::string value)
{
Manager::instance().add(variable, name, value);
}