From fcf3870b7c0f30a5991e518ad8a404a9d38c3a45 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 26 Jan 2018 23:09:31 +0100 Subject: Using boost::program_options instead of libconfig --- src/configuration.h | 54 ++++++++++++++--------------------------------------- 1 file changed, 14 insertions(+), 40 deletions(-) (limited to 'src/configuration.h') diff --git a/src/configuration.h b/src/configuration.h index 913fa65..27988b9 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -9,39 +9,34 @@ #ifndef CONFIGURATION_H #define CONFIGURATION_H -#include #include #include #include #include - -std::string castToString(const libconfig::Setting &v); -void setFromString(libconfig::Setting &setting, const std::string &value); +#include +#include class Configuration { public: - explicit Configuration(const std::string &path, const std::string &home); + explicit Configuration(const QStringList &options = QStringList()); ~Configuration(); bool read(const QString &path); - bool writeIfNeeded(const std::string &path = std::string()); - - std::vector childrenSettings(const char *name = ""); - std::vector childrenGroups(const char *name = ""); template std::optional value(const char *path) const { - // if setting doesn't exist, give back a nullopt - if(!m_userCfg->exists(path)) { - qWarning("Requesting non-existent option %s", path); - return std::nullopt; + // if setting doesn't exist, we crash + // in debug builds, check if setting exists +#ifdef QT_DEBUG + if(vm.count(path) == 0) { + qWarning("value(%s) does not exist, probably crashing now", path); } +#endif - const libconfig::Setting &v = m_userCfg->lookup(path); if constexpr(std::is_same_v) { - std::string r = castToString(v); + std::string r = vm[path].as(); // check if it's a path if(r.front() == '~') { @@ -50,35 +45,14 @@ public: return std::optional(r); } else - return std::optional(static_cast(v)); - } - - template - bool setValue(std::string path, const T &val) - { - if(!m_userCfg->exists(path)) { - return false; - } - - libconfig::Setting &setting = m_userCfg->lookup(path); - // compiler complained about operator= not taking unsinged ints, longs and long longs - if constexpr(std::is_unsigned_v && !std::is_same_v) { - setting = static_cast>(val); - } else if constexpr(std::is_same_v) { - setFromString(setting, val); - } else { - setting = val; - } - - changed = true; - return true; + return std::optional(vm[path].as()); } private: - bool changed = false; + boost::program_options::options_description desc; + boost::program_options::variables_map vm; + std::string m_homePath; - std::string m_userCfgPath; - libconfig::Config *m_userCfg; }; #endif // CONFIGURATION_H -- cgit v1.2.1