00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026
00027
00028
00029
00030 #define prefix_ inline
00031
00032
00033
00034
00035
00036 template <class Owner>
00037 prefix_ senf::console::ScopedDirectory<Owner>::ScopedDirectory(Owner * owner)
00038 : owner_ (owner)
00039 {
00040 SENF_ASSERT(owner_, "ScopedDirectory owner is mandatory");
00041 }
00042
00043 template <class Owner>
00044 template <class NodeType>
00045 prefix_ NodeType & senf::console::ScopedDirectory<Owner>::add(std::string const & name,
00046 boost::shared_ptr<NodeType> othernode)
00047 {
00048 return node().add(name, othernode);
00049 }
00050
00051 template <class Owner>
00052 template <class NodeType>
00053 prefix_ NodeType & senf::console::ScopedDirectory<Owner>::
00054 add(std::string const & name, NodeType & othernode,
00055 typename boost::enable_if< boost::is_convertible<NodeType &, GenericNode &> >::type *)
00056 {
00057 return node().add(name,othernode);
00058 }
00059
00060 template <class Owner>
00061 template <class Factory>
00062 prefix_ typename Factory::result_type senf::console::ScopedDirectory<Owner>::
00063 add(std::string const & name, Factory const & factory,
00064 typename boost::enable_if< boost::is_convertible<Factory*, detail::OwnedNodeFactory*> >::type *)
00065 {
00066 return factory.create(*owner_, name, node());
00067 }
00068
00069 template <class Owner>
00070 template <class Factory>
00071 prefix_ typename Factory::result_type senf::console::ScopedDirectory<Owner>::
00072 add(std::string const & name, Factory const & factory,
00073 typename boost::enable_if< boost::is_convertible<Factory*, detail::NodeFactory*> >::type *,
00074 typename boost::disable_if< boost::is_convertible<Factory*, detail::OwnedNodeFactory*> >::type *)
00075 {
00076 return node().add(name, factory);
00077 }
00078
00079
00080
00081
00082
00083 template <class NodeType>
00084 prefix_ NodeType & senf::console::ScopedDirectory<void>::add(std::string const & name,
00085 boost::shared_ptr<NodeType> othernode)
00086 {
00087 return node().add(name,othernode);
00088 }
00089
00090 template <class NodeType>
00091 prefix_ NodeType & senf::console::ScopedDirectory<void>::
00092 add(std::string const & name, NodeType & othernode,
00093 typename boost::enable_if< boost::is_convertible<NodeType &, GenericNode &> >::type *)
00094 {
00095 return node().add(name,othernode);
00096 }
00097
00098 template <class Factory>
00099 prefix_ typename Factory::result_type senf::console::ScopedDirectory<void>::
00100 add(std::string const & name, Factory const & factory,
00101 typename boost::enable_if< boost::is_convertible<Factory*, detail::NodeFactory*> >::type *)
00102 {
00103 return node().add(name,factory);
00104 }
00105
00106
00107 #undef prefix_
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118