X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=3257794671530e119edcc9de67a9f78633d2d0c6;hb=c7df14c38a87ceca13df47fa700d3f9fa250be91;hp=f18487bfeeb61493bc5ab0459f81903deff13ddf;hpb=30b1243ff16b908ae18b4ab9d70f772c9196b949;p=builder.git diff --git a/source/config.h b/source/config.h index f18487b..3257794 100644 --- a/source/config.h +++ b/source/config.h @@ -6,7 +6,7 @@ #include #include #include -#include "misc.h" +#include "feature.h" class SourcePackage; @@ -18,17 +18,15 @@ class Config { public: /** A single configuration option. */ - struct Option + struct Option: public Feature { - std::string name; - std::string defv; - std::string descr; std::string value; - Option(const std::string &, const std::string &, const std::string &); + Option(const Feature &); }; typedef std::map OptionMap; + typedef std::map InputOptions; private: class Loader: public Msp::DataFile::ObjectLoader @@ -41,38 +39,29 @@ private: SourcePackage &package; OptionMap options; + InputOptions pending_options; Msp::Time::TimeStamp mtime; - bool changed; + mutable 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 &); + /** Adds a configuration option based on a feature. */ + const Option &add_option(const Feature &); - /** 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; } + bool set_option(const std::string &, const std::string &); /** Checks whether an option exists. */ bool is_option(const std::string &) const; - /** Processes options from the given raw option map. Nonexistent options - are ignored. If any options were changed, the mtime of the configuration is - updated to the current time. Return value indicates whether any options - were changed. */ - bool update(const StringMap &); + /** Gets a configuration option by name. */ + const Option &get_option(const std::string &) const; - /** Expands any variable references in options. */ - void finish(); + const OptionMap &get_options() const { return options; } + const Msp::Time::TimeStamp &get_mtime() const { return mtime; } - void save() const; -private: - bool set_option(const std::string &, const std::string &); -public: void load(); + void save() const; }; #endif