summaryrefslogtreecommitdiff
path: root/src/config
diff options
context:
space:
mode:
Diffstat (limited to 'src/config')
-rw-r--r--src/config/config.cpp122
-rw-r--r--src/config/config.hpp103
2 files changed, 0 insertions, 225 deletions
diff --git a/src/config/config.cpp b/src/config/config.cpp
deleted file mode 100644
index b870339..0000000
--- a/src/config/config.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#include <config/config.hpp>
-
-#include <iostream>
-#include <sstream>
-
-#include <stdlib.h>
-
-std::string Config::filename = "./biboumi.cfg";
-bool Config::file_must_exist = false;
-
-std::string Config::get(const std::string& option, const std::string& def)
-{
- Config* self = Config::instance().get();
- auto it = self->values.find(option);
-
- if (it == self->values.end())
- return def;
- return it->second;
-}
-
-int Config::get_int(const std::string& option, const int& def)
-{
- Config* self = Config::instance().get();
- std::string res = self->get(option, "");
- if (!res.empty())
- return atoi(res.c_str());
- else
- return def;
-}
-
-void Config::set(const std::string& option, const std::string& value, bool save)
-{
- Config* self = Config::instance().get();
- self->values[option] = value;
- if (save)
- {
- self->save_to_file();
- self->trigger_configuration_change();
- }
-}
-
-void Config::connect(t_config_changed_callback callback)
-{
- Config* self = Config::instance().get();
- self->callbacks.push_back(callback);
-}
-
-void Config::close()
-{
- Config* self = Config::instance().get();
- self->values.clear();
- Config::instance().reset();
-}
-
-/**
- * Private methods
- */
-
-void Config::trigger_configuration_change()
-{
- std::vector<t_config_changed_callback>::iterator it;
- for (it = this->callbacks.begin(); it < this->callbacks.end(); ++it)
- (*it)();
-}
-
-std::unique_ptr<Config>& Config::instance()
-{
- static std::unique_ptr<Config> instance;
-
- if (!instance)
- {
- instance = std::make_unique<Config>();
- instance->read_conf();
- }
- return instance;
-}
-
-bool Config::read_conf()
-{
- std::ifstream file;
- file.open(filename.data());
- if (!file.is_open())
- {
- if (Config::file_must_exist)
- {
- perror(("Error while opening file " + filename + " for reading.").c_str());
- file.exceptions(std::ifstream::failbit);
- }
- return false;
- }
-
- std::string line;
- size_t pos;
- std::string option;
- std::string value;
- while (file.good())
- {
- std::getline(file, line);
- if (line == "" || line[0] == '#')
- continue ;
- pos = line.find('=');
- if (pos == std::string::npos)
- continue ;
- option = line.substr(0, pos);
- value = line.substr(pos+1);
- this->values[option] = value;
- }
- return true;
-}
-
-void Config::save_to_file() const
-{
- std::ofstream file(this->filename.data());
- if (file.fail())
- {
- std::cerr << "Could not save config file." << std::endl;
- return ;
- }
- for (auto& it: this->values)
- file << it.first << "=" << it.second << std::endl;
- file.close();
-}
diff --git a/src/config/config.hpp b/src/config/config.hpp
deleted file mode 100644
index e070816..0000000
--- a/src/config/config.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * Read the config file and save all the values in a map.
- * Also, a singleton.
- *
- * Use Config::filename = "bla" to set the filename you want to use.
- *
- * If you want to exit if the file does not exist when it is open for
- * reading, set Config::file_must_exist = true.
- *
- * Config::get() can the be used to access the values in the conf.
- *
- * Use Config::close() when you're done getting/setting value. This will
- * save the config into the file.
- */
-
-#ifndef CONFIG_INCLUDED
-# define CONFIG_INCLUDED
-
-#include <functional>
-#include <fstream>
-#include <memory>
-#include <vector>
-#include <string>
-#include <map>
-
-typedef std::function<void()> t_config_changed_callback;
-
-class Config
-{
-public:
- Config(){};
- ~Config(){};
- /**
- * returns a value from the config. If it doesn’t exist, use
- * the second argument as the default.
- * @param option The option we want
- * @param def The default value in case the option does not exist
- */
- static std::string get(const std::string&, const std::string&);
- /**
- * returns a value from the config. If it doesn’t exist, use
- * the second argument as the default.
- * @param option The option we want
- * @param def The default value in case the option does not exist
- */
- static int get_int(const std::string&, const int&);
- /**
- * Set a value for the given option. And write all the config
- * in the file from which it was read if boolean is set.
- * @param option The option to set
- * @param value The value to use
- * @param save if true, save the config file
- */
- static void set(const std::string&, const std::string&, bool save = false);
- /**
- * Adds a function to a list. This function will be called whenever a
- * configuration change occurs.
- */
- static void connect(t_config_changed_callback);
- /**
- * Close the config file, saving it to the file is save == true.
- */
- static void close();
-
- /**
- * Set the value of the filename to use, before calling any method.
- */
- static std::string filename;
- /**
- * Set to true if you want an exception to be raised if the file does not
- * exist when reading it.
- */
- static bool file_must_exist;
-
-private:
- /**
- * Get the singleton instance
- */
- static std::unique_ptr<Config>& instance();
- /**
- * Read the configuration file at the given path.
- */
- bool read_conf();
- /**
- * Write all the config values into the configuration file
- */
- void save_to_file() const;
- /**
- * Call all the callbacks previously registered using connect().
- * This is used to notify any class that a configuration change occured.
- */
- void trigger_configuration_change();
-
- std::map<std::string, std::string> values;
- std::vector<t_config_changed_callback> callbacks;
-
- Config(const Config&) = delete;
- Config& operator=(const Config&) = delete;
- Config(Config&&) = delete;
- Config& operator=(Config&&) = delete;
-};
-
-#endif // CONFIG_INCLUDED