/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: git://neueland.iserlohn-fortress.net/smolbote.git * * SPDX-License-Identifier: GPL-3.0 */ #ifndef CONFIGURATION_H #define CONFIGURATION_H #include #include #include namespace libconfig { class Config; class Setting; } class Configuration { public: Configuration(); ~Configuration(); bool readUserConfiguration(const std::string &path); bool writeUserConfiguration(const std::string &path); bool readDefaultConfiguration(const std::string &data); std::vector childrenSettings(const char *name = ""); std::vector childrenGroups(const char *name = ""); template std::optional value(const char* path) const; template void setValue(std::string path, const T &val); private: libconfig::Config* getConfig(const char* path) const; std::string m_userCfgPath; libconfig::Config *m_userCfg; libconfig::Config *m_defaultCfg; }; // replace ~ with home std::string& patchHome(std::string &path, const std::string &home); // instantiate functions // this needs to be done because the implementation is in the cpp file // Settings::value<> extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; extern template std::optional Configuration::value(const char* path) const; // Settings::setValue<> extern template void Configuration::setValue(std::string path, const int &val); extern template void Configuration::setValue(std::string path, const unsigned int &val); extern template void Configuration::setValue(std::string path, const long &val); extern template void Configuration::setValue(std::string path, const unsigned long &val); extern template void Configuration::setValue(std::string path, const long long &val); extern template void Configuration::setValue(std::string path, const unsigned long long &val); extern template void Configuration::setValue(std::string path, const float &val); extern template void Configuration::setValue(std::string path, const double &val); extern template void Configuration::setValue(std::string path, const bool &val); extern template void Configuration::setValue(std::string path, const std::string &val); #endif // CONFIGURATION_H