type casts for config manager

This commit is contained in:
Eduardo Bart 2011-05-19 20:56:27 -03:00
parent afc79a99e1
commit f72214f090
3 changed files with 21 additions and 88 deletions

View File

@ -40,17 +40,12 @@ bool Configs::load(const std::string& fileName)
return false; return false;
try { try {
YAML::Parser parser(fin);
YAML::Node doc; YAML::Node doc;
YAML::Parser parser(fin);
parser.GetNextDocument(doc); parser.GetNextDocument(doc);
for(auto it = doc.begin(); it != doc.end(); ++it) { for(auto it = doc.begin(); it != doc.end(); ++it)
std::string key, value; m_confsMap[yamlRead<std::string>(it.first())] = yamlRead<std::string>(it.second());
it.first() >> key;
it.second() >> value;
m_confsMap[key] = value;
}
} catch (YAML::Exception& e) { } catch (YAML::Exception& e) {
flogError("ERROR: Malformed config file: %s", e.what()); flogError("ERROR: Malformed config file: %s", e.what());
return false; return false;
@ -68,71 +63,3 @@ void Configs::save()
} }
} }
void Configs::setValue(const std::string &key, const std::string &value)
{
m_confsMap[key] = value;
}
void Configs::setValue(const std::string &key, const char *value)
{
m_confsMap[key] = value;
}
void Configs::setValue(const std::string &key, int value)
{
setValue(key, convert_cast<std::string>(value));
}
void Configs::setValue(const std::string &key, float value)
{
setValue(key, convert_cast<std::string>(value));
}
void Configs::setValue(const std::string &key, bool value)
{
if(value)
setValue(key,"true");
else
setValue(key,"false");
}
const std::string &Configs::getString(const std::string &key) const
{
auto it = m_confsMap.find(key);
if(it == m_confsMap.end()) {
flogWarning("WARNING: Config value %s not found", key.c_str());
static std::string emptystr;
return emptystr;
}
return it->second;
}
float Configs::getFloat(const std::string &key) const
{
auto it = m_confsMap.find(key);
if(it == m_confsMap.end()) {
flogWarning("WARNING: Config value %s not found", key.c_str());
return 0;
}
return convert_cast<float>(it->second);
}
bool Configs::getBoolean(const std::string &key) const
{
auto it = m_confsMap.find(key);
if(it == m_confsMap.end()) {
flogWarning("WARNING: Config value %s not found", key.c_str());
return 0;
}
return (it->second == "true");
}
int Configs::getInteger(const std::string &key) const
{
auto it = m_confsMap.find(key);
if(it == m_confsMap.end()) {
flogWarning("WARNING: Config value %s not found", key.c_str());
return 0;
}
return convert_cast<int>(it->second);
}

View File

@ -27,6 +27,18 @@
#include <prerequisites.h> #include <prerequisites.h>
class ConfigValueProxy {
public:
ConfigValueProxy(const std::string& value) : value(value) { }
operator std::string() const { return convert_cast<std::string>(value); }
operator float() const { return convert_cast<float>(value); }
operator int() const { return convert_cast<int>(value); }
operator bool() const { return convert_cast<bool>(value); }
private:
std::string value;
};
class Configs class Configs
{ {
public: public:
@ -38,16 +50,10 @@ public:
/// Dump all settings to configuration file /// Dump all settings to configuration file
void save(); void save();
void setValue(const std::string &key, const std::string &value); template<class T>
void setValue(const std::string &key, const char *value); void setValue(const std::string& key, const T& value) { m_confsMap[key] = convert_cast<std::string>(value); }
void setValue(const std::string &key, float value);
void setValue(const std::string &key, bool value);
void setValue(const std::string &key, int value);
const std::string& getString(const std::string &key) const; ConfigValueProxy get(const std::string& key) { return ConfigValueProxy(m_confsMap[key]); }
float getFloat(const std::string &key) const;
bool getBoolean(const std::string &key) const;
int getInteger(const std::string &key) const;
private: private:
std::string m_fileName; std::string m_fileName;

View File

@ -112,10 +112,10 @@ int main(int argc, const char *argv[])
logInfo("OTClient 0.2.0"); logInfo("OTClient 0.2.0");
// create the window // create the window
Platform::createWindow(g_configs.getInteger("window x"), g_configs.getInteger("window y"), Platform::createWindow(g_configs.get("window x"), g_configs.get("window y"),
g_configs.getInteger("window width"), g_configs.getInteger("window height"), g_configs.get("window width"), g_configs.get("window height"),
550, 450, 550, 450,
g_configs.getBoolean("window maximized")); g_configs.get("window maximized"));
Platform::setWindowTitle("OTClient"); Platform::setWindowTitle("OTClient");
//Platform::setVsync(); //Platform::setVsync();