X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=8372af90f99c330c197a0343000b63d481df0013;hb=3b13563d75a8fd711a9cf87cae62960f90a5bc39;hp=1b78e3a4e4d2e8a1168be85f6ec0f78187d60202;hpb=59ac0a44d6edf179c01604c6ced744873213f855;p=builder.git diff --git a/source/config.h b/source/config.h index 1b78e3a..8372af9 100644 --- a/source/config.h +++ b/source/config.h @@ -3,13 +3,21 @@ #include #include -#include "option.h" +#include +#include +#include +#include "misc.h" -typedef std::map RawOptionMap; +class SourcePackage; +/** +Manages configuration for a package. A configuration may have an arbitary +amount of options, as well as a modification time (mtime). +*/ class Config { public: + /** A single configuration option. */ struct Option { std::string name; @@ -19,15 +27,43 @@ public: Option(const std::string &, const std::string &, const std::string &); }; + typedef std::map OptionMap; + typedef std::map InputOptions; + +private: + class Loader: public Msp::DataFile::ObjectLoader + { + public: + Loader(Config &); + private: + void option(const std::string &, const std::string &); + }; + + SourcePackage &package; + OptionMap options; + InputOptions pending_options; + Msp::Time::TimeStamp mtime; + bool changed; +public: + Config(SourcePackage &); + + /** Adds a configuration option with name, default value and description. */ void add_option(const std::string &, const std::string &, const std::string &); + + /** Gets a configuration option by name. */ const Option &get_option(const std::string &) const; + + const OptionMap &get_options() const { return options; } + const Msp::Time::TimeStamp &get_mtime() const { return mtime; } + + /** Checks whether an option exists. */ bool is_option(const std::string &) const; - bool process(const RawOptionMap &); - void load(const std::string &); -private: - OptionMap options; + + void save() const; + bool set_option(const std::string &, const std::string &); + void load(); }; #endif