X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fconfig.cpp;h=61f7322e742ead72279f2d89a33f1012a4c8f497;hb=cbb3c4c6aab7b04f7bd2178fb8f12846d532a472;hp=50e0de9f9a165bfd9e461c6d8a194e1a756c316c;hpb=59ac0a44d6edf179c01604c6ced744873213f855;p=builder.git diff --git a/source/config.cpp b/source/config.cpp index 50e0de9..61f7322 100644 --- a/source/config.cpp +++ b/source/config.cpp @@ -1,4 +1,7 @@ +#include #include +#include +#include #include "config.h" using namespace std; @@ -37,12 +40,51 @@ bool Config::process(const RawOptionMap &opts) } } + if(changed) + mtime=Time::now(); + return changed; } +void Config::load(const Path::Path &fn) +{ + ifstream in(fn.str().c_str()); + if(!in) return; + + struct stat st; + Path::stat(fn, st); + mtime=Time::TimeStamp::from_unixtime(st.st_mtime); + + Parser::Parser parser(in, fn.str()); + Loader loader(*this); + loader.load(parser); +} + +void Config::save(const Path::Path &fn) const +{ + ofstream out(fn.str().c_str()); + if(!out) return; + + for(OptionMap::const_iterator i=options.begin(); i!=options.end(); ++i) + out<<"option \""<second.name<<"\" \""<second.value<<"\";\n"; +} + Config::Option::Option(const string &n, const string &v, const string &d): name(n), defv(v), descr(d), value(v) { } + +Config::Loader::Loader(Config &c): + conf(c) +{ + add("option", &Loader::option); +} + +void Config::Loader::option(const string &n, const string &v) +{ + OptionMap::iterator i=conf.options.find(n); + if(i!=conf.options.end()) + i->second.value=v; +}