X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=16094e0cb4a4e8ca0263ef34d6b5ac349fdae5e9;hb=3aad704c2d2fac737424a0a2697874927bd95c37;hp=38ac5e44d98ac15f6079871e1a39d0ac9fbd4a80;hpb=a2adbd9c0a8d7a7567848c4c6bdbf0de6ba32bb1;p=builder.git diff --git a/source/config.h b/source/config.h index 38ac5e4..16094e0 100644 --- a/source/config.h +++ b/source/config.h @@ -1,7 +1,7 @@ /* $Id$ This file is part of builder -Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions +Copyright © 2006-2009 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ @@ -24,9 +24,7 @@ amount of options, as well as a modification time (mtime). class Config { public: - /** - A single configuration option. - */ + /** A single configuration option. */ struct Option { std::string name; @@ -36,35 +34,60 @@ public: Option(const std::string &, const std::string &, const std::string &); }; + typedef std::map OptionMap; - Config(SourcePackage &); - 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; - void select_last_profile(); - void select_profile(const std::string &); - bool update(const StringMap &); - void finish(); - void save() const; private: class Loader: public Msp::DataFile::Loader { - public: - Loader(Config &); private: Config &conf; + public: + Loader(Config &); + private: void option(const std::string &, const std::string &); }; - SourcePackage &package; - OptionMap options; + SourcePackage &package; + OptionMap options; Msp::Time::TimeStamp mtime; bool freeze_mtime; +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; + + /** Selects the last profile used. If the profile cache file is not + present, the default profile is assumed. */ + void select_last_profile(); + + /** Selects a profile. The profile cache file is updated, unless doing a + dry run. */ + void select_profile(const std::string &); + + /** 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 &); + + /** Expands any variable references in options. */ + void finish(); + + void save() const; +private: bool set_option(const std::string &, const std::string &); void load(); };