louloulibs is directly included, instead of being a submodule

Because this is a nightmare to manage
This commit is contained in:
Florent Le Coz
2015-05-28 23:46:24 +02:00
parent 897b281e67
commit e1a7114c8d
56 changed files with 5594 additions and 4 deletions
+103
View File
@@ -0,0 +1,103 @@
/**
* 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