/** \file
\brief Config inline non-template implementation */
-//#include "Config.ih"
+#include "Config.ih"
// Custom includes
#include "../Utils/membind.hh"
///////////////////////////////cci.p///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
-// senf::console::ConfigFile
+// senf::console::detail::RestrictedExecutor
-prefix_ senf::console::ConfigFile::ConfigFile(std::string const & filename)
- : filename_ (filename)
+prefix_ bool senf::console::detail::RestrictedExecutor::complete()
+ const
{
- executor_.policy(senf::membind(&ConfigFile::policyCallback, this));
+ return parsedNodes_.size() == 1
+ && ! parsedNodes_[0].expired()
+ && *parsedNodes_[0].lock() == executor_.chroot();
}
-prefix_ void senf::console::ConfigFile::policyCallback(DirectoryNode & dir,
- std::string const & name)
+prefix_ void senf::console::detail::RestrictedExecutor::reset()
{
- if (dir.hasChild(name)) {
- GenericNode & item (dir.get(name));
- if (restrict_ && ! item.isChildOf(*restrict_)) {
- DirectoryNode * itemdir (dynamic_cast<DirectoryNode*>(&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();
- }
+ parsedNodes_.clear();
+}
+
+prefix_ senf::console::DirectoryNode & senf::console::detail::RestrictedExecutor::root()
+ const
+{
+ return executor_.chroot();
+}
+
+///////////////////////////////////////////////////////////////////////////
+// senf::console::ConfigBundle
+
+prefix_ senf::console::ConfigBundle::ConfigBundle()
+{}
+
+prefix_ senf::console::ConfigBundle::ConfigBundle(DirectoryNode & root)
+ : executor_ (root)
+{}
+
+prefix_ bool senf::console::ConfigBundle::complete()
+ const
+{
+ return executor_.complete();
+}
+
+prefix_ bool senf::console::ConfigBundle::parsed(GenericNode & node)
+ const
+{
+ return executor_.parsed(node);
+}
+
+prefix_ void senf::console::ConfigBundle::reset()
+{
+ executor_.reset();
+}
+
+///////////////////////////////////////////////////////////////////////////
+// senf::console::detail::ConfigSource
+
+prefix_ void senf::console::detail::ConfigSource::parse(RestrictedExecutor & executor)
+{
+ v_parse(executor);
+}
+
+///////////////////////////////////////////////////////////////////////////
+// senf::console::detail::BundleMixin
+
+prefix_ senf::console::detail::BundleMixin::BundleMixin()
+{}
+
+prefix_ senf::console::detail::BundleMixin::BundleMixin(DirectoryNode & root)
+ : bundle_ (root)
+{}
+
+prefix_ void senf::console::detail::BundleMixin::parse()
+{
+ bundle_.parse();
+}
+
+prefix_ void senf::console::detail::BundleMixin::parse(DirectoryNode & restrict)
+{
+ bundle_.parse(restrict);
+}
+
+prefix_ bool senf::console::detail::BundleMixin::complete()
+ const
+{
+ return bundle_.complete();
+}
+
+prefix_ bool senf::console::detail::BundleMixin::parsed(GenericNode & node)
+ const
+{
+ return bundle_.parsed(node);
+}
+
+prefix_ void senf::console::detail::BundleMixin::reset()
+{
+ bundle_.reset();
}
///////////////////////////////cci.e///////////////////////////////////////