00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 #ifndef HH_SENF_Scheduler_Console_Config_
00027 #define HH_SENF_Scheduler_Console_Config_ 1
00028
00029
00030 #include <boost/utility.hpp>
00031 #include <list>
00032 #include "Executor.hh"
00033
00034
00035 #include "Config.ih"
00036
00037
00038 namespace senf {
00039 namespace console {
00040
00062 class ConfigBundle
00063 {
00064 public:
00065
00067
00068
00069 ConfigBundle();
00070 ConfigBundle(DirectoryNode & root);
00071
00072
00073
00074
00075 template <class Source>
00076 Source & add(boost::intrusive_ptr<Source> source);
00078
00079 void parse();
00080
00081 void parse(DirectoryNode & restrict);
00082
00085 bool complete() const;
00086 bool parsed(GenericNode & node) const;
00087 void reset();
00088
00092 DirectoryNode & root() const;
00093 void chroot(DirectoryNode & node);
00094
00095 protected:
00096
00097 private:
00098 void parseInternal();
00099
00100 typedef std::list<detail::ConfigSource::ptr> Sources;
00101
00102 Sources sources_;
00103 detail::RestrictedExecutor executor_;
00104 };
00105
00106 namespace detail {
00107
00108
00115 class BundleMixin
00116 {
00117 public:
00118 BundleMixin();
00119 BundleMixin(DirectoryNode & root);
00120
00121 void parse();
00122
00123 void parse(DirectoryNode & restrict);
00124
00127 bool complete() const;
00128 bool parsed(GenericNode & node) const;
00129 void reset();
00130
00134 protected:
00135 template <class Source>
00136 Source & add(boost::intrusive_ptr<Source> source);
00137
00138 private:
00139 ConfigBundle bundle_;
00140 };
00141
00142 }}}
00143
00144
00145 #include "Config.cci"
00146
00147 #include "Config.cti"
00148 #endif
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159