#ifndef SAPPHIRE_CONFIGMGR_H #define SAPPHIRE_CONFIGMGR_H #include #include #include #include #include namespace Core { class ConfigMgr { public: ConfigMgr() = default; ~ConfigMgr() = default; bool loadConfig( const std::string& configName ); template struct always_false : std::false_type {}; template< class T > T getValue( const std::string& section, const std::string& name, T defaultValue = T() ) { if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetInteger( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetReal( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetReal( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->Get( section, name, defaultValue ); else if constexpr (std::is_same_v) return m_pInih->GetBoolean( section, name, defaultValue ); else static_assert(always_false::value, "non-exhaustive getter!"); } template< class T > void setValue( const std::string& name, T defaultValue = T() ) { // TODO: reimplement this... //m_propTree.put( name, defaultValue ); } private: bool copyDefaultConfig( const std::string& configName ); std::unique_ptr< INIReader > m_pInih; const std::string m_globalConfigFile = "global.ini"; const std::string m_configFolderRoot = "./config/"; const std::string m_configDefaultSuffix = ".default"; }; } #endif //SAPPHIRE_CONFIGMGR_H