summaryrefslogtreecommitdiff
path: root/louloulibs/config/config.hpp
diff options
context:
space:
mode:
authorVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:40 +0530
committerVasudev Kamath <vasudev@copyninja.info>2016-10-23 21:09:40 +0530
commiteda4b75b1cff83336e87da90efca9fd6b4ced2c7 (patch)
tree491317ce50b5d19bc434ccc4b448d1bc70520177 /louloulibs/config/config.hpp
parent716c40e4ec45f8d538695225f4f06d541d959084 (diff)
parent0f14fe83ef53b08bd8fa09670c82f4996c329bdc (diff)
downloadbiboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.gz
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.bz2
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.tar.xz
biboumi-eda4b75b1cff83336e87da90efca9fd6b4ced2c7.zip
New upstream version 3.0upstream/3.0
Diffstat (limited to 'louloulibs/config/config.hpp')
-rw-r--r--louloulibs/config/config.hpp94
1 files changed, 94 insertions, 0 deletions
diff --git a/louloulibs/config/config.hpp b/louloulibs/config/config.hpp
new file mode 100644
index 0000000..6728df8
--- /dev/null
+++ b/louloulibs/config/config.hpp
@@ -0,0 +1,94 @@
+/**
+ * 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 then 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.
+ */
+
+#pragma once
+
+
+#include <functional>
+#include <fstream>
+#include <memory>
+#include <vector>
+#include <string>
+#include <map>
+
+typedef std::function<void()> t_config_changed_callback;
+
+class Config
+{
+public:
+ Config() = default;
+ ~Config() = default;
+ Config(const Config&) = delete;
+ Config& operator=(const Config&) = delete;
+ Config(Config&&) = delete;
+ Config& operator=(Config&&) = delete;
+
+ /**
+ * returns a value from the config. If it doesn’t exist, use
+ * the second argument as the default.
+ */
+ 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.
+ */
+ 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 save is true.
+ */
+ 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 (when set() is called, or when the initial
+ * conf is read)
+ */
+ static void connect(t_config_changed_callback);
+ /**
+ * Destroy the instance, forcing it to be recreated (with potentially
+ * different parameters) the next time it’s needed.
+ */
+ static void clear();
+ /**
+ * Read the configuration file at the given path.
+ */
+ static bool read_conf(const std::string& name="");
+ /**
+ * Get the filename
+ */
+ static const std::string& get_filename()
+ { return Config::filename; }
+
+private:
+ /**
+ * Set the value of the filename to use, before calling any method.
+ */
+ static std::string filename;
+ /**
+ * Write all the config values into the configuration file
+ */
+ static void save_to_file();
+ /**
+ * Call all the callbacks previously registered using connect().
+ * This is used to notify any class that a configuration change occured.
+ */
+ static void trigger_configuration_change();
+
+ static std::map<std::string, std::string> values;
+ static std::vector<t_config_changed_callback> callbacks;
+
+};
+
+