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;
try {
YAML::Parser parser(fin);
YAML::Node doc;
YAML::Parser parser(fin);
parser.GetNextDocument(doc);
for(auto it = doc.begin(); it != doc.end(); ++it) {
std::string key, value;
it.first() >> key;
it.second() >> value;
m_confsMap[key] = value;
}
for(auto it = doc.begin(); it != doc.end(); ++it)
m_confsMap[yamlRead<std::string>(it.first())] = yamlRead<std::string>(it.second());
} catch (YAML::Exception& e) {
flogError("ERROR: Malformed config file: %s", e.what());
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>
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
{
public:
@ -38,16 +50,10 @@ public:
/// Dump all settings to configuration file
void save();
void setValue(const std::string &key, const std::string &value);
void setValue(const std::string &key, const char *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);
template<class T>
void setValue(const std::string& key, const T& value) { m_confsMap[key] = convert_cast<std::string>(value); }
const std::string& getString(const std::string &key) const;
float getFloat(const std::string &key) const;
bool getBoolean(const std::string &key) const;
int getInteger(const std::string &key) const;
ConfigValueProxy get(const std::string& key) { return ConfigValueProxy(m_confsMap[key]); }
private:
std::string m_fileName;

View File

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