X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=2767f8263a827a67693ee18376d605e842077530;hb=57bdb055acb0453c75b22cb64f35cc0e817a2827;hp=e5c90de0ce597f5bb14607a0f0b0e49481682202;hpb=97001ddfa2463e6a3526eff772962acdad45f995;p=builder.git diff --git a/source/config.h b/source/config.h index e5c90de..2767f82 100644 --- a/source/config.h +++ b/source/config.h @@ -6,13 +6,19 @@ #include #include #include -#include "option.h" typedef std::map RawOptionMap; +/** +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; @@ -26,17 +32,31 @@ public: void add_option(const std::string &, const std::string &, const std::string &); const Option &get_option(const std::string &) const; + const OptionMap &get_options() const { return options; } const Msp::Time::TimeStamp &get_mtime() const { return mtime; } bool is_option(const std::string &) const; - bool process(const RawOptionMap &); - void load(const Msp::Path::Path &); + void select_last_profile(); + void select_profile(const std::string &); + bool update(const RawOptionMap &); + void set_source(const Msp::Path::Path &s) { source=s; } + void save() const; private: class Loader: public Msp::Parser::Loader { + public: + Loader(Config &); + private: + Config &conf; + + void option(const std::string &, const std::string &); }; - OptionMap options; + Msp::Path::Path source; + OptionMap options; Msp::Time::TimeStamp mtime; + + bool set_option(const std::string &, const std::string &); + void load(); }; #endif