X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.h;h=1f7fa712839f5b5bdc346681e3a346c117aafba4;hb=bc85cc286c8a3f1055f1979a7ff8697cf1b61912;hp=ba23462c00e53a63196fcb0cb08fdae72fa40d2a;hpb=654de39b62a9a58fd8e1b5a557361d628345788b;p=builder.git diff --git a/source/config.h b/source/config.h index ba23462..1f7fa71 100644 --- a/source/config.h +++ b/source/config.h @@ -1,19 +1,12 @@ -/* $Id$ - -This file is part of builder -Copyright © 2006-2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #ifndef CONFIG_H_ #define CONFIG_H_ #include #include #include -#include +#include #include -#include "misc.h" +#include "feature.h" class SourcePackage; @@ -24,49 +17,51 @@ amount of options, as well as a modification time (mtime). class Config { public: - /** - A single configuration option. - */ - struct Option + /** A single configuration 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; - 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 + class Loader: public Msp::DataFile::ObjectLoader { public: Loader(Config &); private: - Config &conf; - void option(const std::string &, const std::string &); }; - SourcePackage &package; - OptionMap options; + SourcePackage &package; + OptionMap options; + InputOptions pending_options; Msp::Time::TimeStamp mtime; - bool freeze_mtime; + bool changed; + +public: + Config(SourcePackage &); + + /** Adds a configuration option based on a feature. */ + const Option &add_option(const Feature &); bool set_option(const std::string &, const std::string &); + + /** Checks whether an option exists. */ + bool is_option(const std::string &) const; + + /** 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; } + void load(); + void save() const; }; #endif