#include "Configurator.hpp" #include #include //------------------------------------------------------------------------------ //------------------------- Constructor/ Destructor ---------------------------- //------------------------------------------------------------------------------ Configurator::Configurator() {} Configurator* Configurator::_instance = nullptr; Configurator* Configurator::instance() { // Speicherbereinigung static CGuard g; if (!_instance) { _instance = new Configurator(); } return _instance; } Configurator::~Configurator() {} //------------------------------------------------------------------------------ //-------------------------------- Read Config --------------------------------- //------------------------------------------------------------------------------ void Configurator::read_config(std::string path, std::string default_path) { // Read Standard Config std::ifstream config_file(path); if (config_file.is_open()) { config_file >> _config; LOG_INFO << "Config loaded Succesfully" << LOG_END; } else { LOG_INFO << "No Config-File found at " + path << LOG_END; throw std::runtime_error("No Config-File found at " + path); } // Read Default Config std::ifstream default_config_file(default_path); if (default_config_file.is_open()) { default_config_file >> _default_config; LOG_INFO << "Default Config loaded Succesfully" << LOG_END; } else { LOG_ERROR << "No Config-File found at default path " + default_path << LOG_END; throw std::runtime_error("No Config-File found at deafult path " + default_path); } } //------------------------------------------------------------------------------ //-------------------------------- Get-Methods --------------------------------- //------------------------------------------------------------------------------ bool Configurator::entry_exists(const std::string att_name) { bool in_default_config = _default_config.find(att_name) != _default_config.end(); bool in_standard_config = _config.find(att_name) != _config.end(); return in_default_config || in_standard_config; } std::string Configurator::get_config_as_string(const std::string& att_name, bool default_value) { return Configurator::get_value_from_config(att_name, default_value); } unsigned int Configurator::get_config_as_unsigned_int(const std::string& att_name, bool default_value) { return Configurator::get_value_from_config(att_name, default_value); } bool Configurator::get_config_as_bool(const std::string& att_name, bool default_value) { return Configurator::get_value_from_config(att_name, default_value); } float Configurator::get_config_as_float(const std::string& att_name, bool default_value) { return Configurator::get_value_from_config(att_name, default_value); } double Configurator::get_config_as_double(const std::string& att_name, bool default_value) { return Configurator::get_value_from_config(att_name, default_value); } template T Configurator::get_value_from_config(const std::string& att_name, bool default_value) { bool search_in_default_config = !(_config.find(att_name) != _config.end()) || default_value; if (!search_in_default_config) { return _config[att_name]; } return _default_config[att_name]; } // TODO Mehrdimensionale Attribute suchen