X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Console%2FConfig.cci;h=3c96a59e787d3fe91692218221837ce8a7140ea2;hb=7a1093db9def94e1cc1aac873f98e28b92fde889;hp=f4e42bca5bd27b34996dcaf0d78c4553e25fba4b;hpb=bf6bdcb90de19ed474535d41c5519518921b717b;p=senf.git diff --git a/Console/Config.cci b/Console/Config.cci index f4e42bc..3c96a59 100644 --- a/Console/Config.cci +++ b/Console/Config.cci @@ -34,33 +34,29 @@ /////////////////////////////////////////////////////////////////////////// // senf::console::ConfigFile -prefix_ senf::console::ConfigFile::ConfigFile(std::string const & filename) +prefix_ senf::console::ConfigFile::ConfigFile(std::string const & filename, + DirectoryNode & root) : filename_ (filename) { - executor_.policy(senf::membind(&ConfigFile::policyCallback, this)); + executor_.chroot(root); } -prefix_ void senf::console::ConfigFile::policyCallback(DirectoryNode & dir, - std::string const & name) +prefix_ void senf::console::ConfigFile::parse() { - if (dir.hasChild(name)) { - GenericNode & item (dir.get(name)); - if (restrict_ && ! item.isChildOf(*restrict_)) { - DirectoryNode * itemdir (dynamic_cast(&item)); - if (! itemdir || ! restrict_->isChildOf(*itemdir)) - throw Executor::IgnoreCommandException(); - } - ParsedNodes::const_iterator i (parsedNodes_.begin()); - ParsedNodes::const_iterator const i_end (parsedNodes_.end()); - for (; i != i_end; ++i) { - if ( ! i->expired() && item.isChildOf(*(i->lock())) ) - throw Executor::IgnoreCommandException(); - } - } - else { - if (restrict_ && ! dir.isChildOf(*restrict_)) - throw Executor::IgnoreCommandException(); - } + parse(executor_.chroot()); +} + +prefix_ bool senf::console::ConfigFile::complete() + const +{ + return parsedNodes_.size() == 1 + && ! parsedNodes_[0].expired() + && *parsedNodes_[0].lock() == executor_.chroot(); +} + +prefix_ void senf::console::ConfigFile::reset() +{ + parsedNodes_.clear(); } ///////////////////////////////cci.e///////////////////////////////////////