From 4a506a4df2db04a883b0104c17a678aa067124f6 Mon Sep 17 00:00:00 2001 From: g0dil <g0dil@wiback.org> Date: Tue, 24 Mar 2009 14:23:58 +0000 Subject: [PATCH] Utils/Console: Fix adding DirectoryNode's --- PPI/Setup.cti | 9 +++++---- Utils/Console/Node.cci | 13 +++++++++++++ Utils/Console/Node.hh | 5 +++++ Utils/Console/ScopedDirectory.cti | 8 ++++++++ Utils/Console/ScopedDirectory.hh | 4 ++++ Utils/Console/Variables.cti | 6 ++++-- Utils/Console/Variables.hh | 4 ++++ 7 files changed, 43 insertions(+), 6 deletions(-) diff --git a/PPI/Setup.cti b/PPI/Setup.cti index f18f8b484..509bbb112 100644 --- a/PPI/Setup.cti +++ b/PPI/Setup.cti @@ -26,6 +26,7 @@ //#include "Setup.ih" // Custom includes +#include "Jack.hh" #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// @@ -37,7 +38,7 @@ prefix_ void senf::ppi:: connect(T & source, C & target, typename boost::disable_if< boost::is_base_of<connector::Connector, T> >::type *, typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type *, - typename boost::disable_if< boost::is_base_of<connector::Jack, T> >:: type *) + typename boost::disable_if< boost::is_base_of<connector::Jack, T> >::type *) { connect(source.output, target); } @@ -47,7 +48,7 @@ prefix_ void senf::ppi:: connect(C & source, T & target, typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type *, typename boost::disable_if< boost::is_base_of<connector::Connector,T> >::type *, - typename boost::disable_if< boost::is_base_of<connector::Jack, T> >:: type *) + typename boost::disable_if< boost::is_base_of<connector::Jack, T> >::type *) { connect(source, target.input); } @@ -57,8 +58,8 @@ prefix_ void senf::ppi:: connect(T1 & source, T2 & target, typename boost::disable_if< boost::is_base_of<connector::Connector, T1> >::type *, typename boost::disable_if< boost::is_base_of<connector::Connector, T2> >::type *, - typename boost::disable_if< boost::is_base_of<connector::Jack, T1> >:: type *, - typename boost::disable_if< boost::is_base_of<connector::Jack, T2> >:: type *) + typename boost::disable_if< boost::is_base_of<connector::Jack, T1> >::type *, + typename boost::disable_if< boost::is_base_of<connector::Jack, T2> >::type *) { connect(source.output, target.input); } diff --git a/Utils/Console/Node.cci b/Utils/Console/Node.cci index 3c21bc95b..59228c229 100644 --- a/Utils/Console/Node.cci +++ b/Utils/Console/Node.cci @@ -212,6 +212,12 @@ senf::console::DirectoryNode::mkdir(std::string const & name) return add(name, create()); } +prefix_ senf::console::DirectoryNode & +senf::console::DirectoryNode::provideDirectory(std::string const & name) +{ + return hasChild(name) ? getDirectory(name) : mkdir(name); +} + prefix_ senf::console::DirectoryNode::ChildrenRange senf::console::DirectoryNode::children() const { @@ -348,6 +354,13 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n return node.add(name, SimpleCommandNode::create(fn)); } +prefix_ senf::console::DirectoryNode & +senf::console::senf_console_add_node(DirectoryNode & node, std::string const & name, + DirectoryNode & dir, int) +{ + return node.add(name, dir.thisptr()); +} + #endif ///////////////////////////////cci.e/////////////////////////////////////// diff --git a/Utils/Console/Node.hh b/Utils/Console/Node.hh index fcd44d0d1..3e796ecb7 100644 --- a/Utils/Console/Node.hh +++ b/Utils/Console/Node.hh @@ -538,6 +538,8 @@ namespace console { DirectoryNode & mkdir(std::string const & name); ///< Create sub-directory node + DirectoryNode & provideDirectory(std::string const & name); + ///< Return subdirectory, possibly creating it ChildrenRange children() const; ///< Return iterator range over all children. /**< The returned range is sorted by child name. */ @@ -711,6 +713,9 @@ namespace console { SimpleCommandNode & senf_console_add_node(DirectoryNode & node, std::string const & name, SimpleCommandNode::Function fn, int); + DirectoryNode & senf_console_add_node(DirectoryNode & node, std::string const & name, + DirectoryNode & dir, int); + #endif }} diff --git a/Utils/Console/ScopedDirectory.cti b/Utils/Console/ScopedDirectory.cti index 6fedea2d3..b93344cf4 100644 --- a/Utils/Console/ScopedDirectory.cti +++ b/Utils/Console/ScopedDirectory.cti @@ -88,6 +88,14 @@ senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & n return node.add(name, boost::bind(fn,boost::ref(owner),_1,_2)); } +template <class Owner> +prefix_ senf::console::DirectoryNode & +senf::console::senf_console_add_node(DirectoryNode & node, Owner & owner, + std::string const & name, DirectoryNode & dir, int) +{ + return node.add(name, dir.thisptr()); +} + template <class Node> prefix_ senf::console::DirectoryNode & senf::console:: senf_console_add_node(DirectoryNode & dir, std::string const & name, Node const & node, int, diff --git a/Utils/Console/ScopedDirectory.hh b/Utils/Console/ScopedDirectory.hh index 512386e37..1712f9f32 100644 --- a/Utils/Console/ScopedDirectory.hh +++ b/Utils/Console/ScopedDirectory.hh @@ -197,6 +197,10 @@ namespace console { DirectoryNode & node, Owner & owner, std::string const & name, void (Owner::*fn)(std::ostream &, ParseCommandInfo const &), int); + template <class Owner> + DirectoryNode & senf_console_add_node(DirectoryNode & node, Owner & owner, + std::string const & name, DirectoryNode & dir, int); + template <class Node> DirectoryNode & senf_console_add_node( DirectoryNode & dir, std::string const & name, Node const & node, int, diff --git a/Utils/Console/Variables.cti b/Utils/Console/Variables.cti index 3c7fd8ed8..f428842b5 100644 --- a/Utils/Console/Variables.cti +++ b/Utils/Console/Variables.cti @@ -199,6 +199,7 @@ template <class Variable> prefix_ senf::console::VariableAttributor<Variable> senf::console:: senf_console_add_node(DirectoryNode & node, std::string const & name, Variable & var, int, typename boost::disable_if< boost::is_convertible<Variable*, ScopedDirectoryBase*> >::type *, + typename boost::disable_if< boost::is_convertible<Variable*, GenericNode*> >::type *, typename boost::disable_if_c<detail::ParsedCommandTraits<Variable>::is_callable>::type *) { return detail::VariableNodeCreator<Variable>::add(node, name, var); @@ -214,9 +215,10 @@ senf::console::senf_console_add_node(DirectoryNode & node, std::string const & n template <class Variable, class Owner> prefix_ senf::console::VariableAttributor<Variable> senf::console:: -senf_console_add_node(DirectoryNode & node, Owner &, std::string const & name, +senf_console_add_node(DirectoryNode & node, Owner & owner, std::string const & name, Variable & var, int, - typename boost::disable_if< boost::is_convertible<Variable*, ScopedDirectoryBase*> >::type *, + typename boost::disable_if< boost::is_convertible<Variable*, ScopedDirectoryBase*> >::type *, + typename boost::disable_if< boost::is_convertible<Variable*, GenericNode*> >::type *, typename boost::disable_if_c<detail::ParsedCommandTraits<Variable>::is_callable>::type *) { return detail::VariableNodeCreator<Variable>::add(node, name, var); diff --git a/Utils/Console/Variables.hh b/Utils/Console/Variables.hh index 13fb7872d..870f2ed7a 100644 --- a/Utils/Console/Variables.hh +++ b/Utils/Console/Variables.hh @@ -42,12 +42,15 @@ namespace console { class ScopedDirectoryBase; template <class Variable> class VariableAttributor; + + #ifndef DOXYGEN template <class Variable> VariableAttributor<Variable> senf_console_add_node( DirectoryNode & node, std::string const & name, Variable & var, int, typename boost::disable_if< boost::is_convertible<Variable*, ScopedDirectoryBase*> >::type * = 0, + typename boost::disable_if< boost::is_convertible<Variable*, GenericNode*> >::type * = 0, typename boost::disable_if_c<detail::ParsedCommandTraits<Variable>::is_callable>::type * = 0); template <class Variable> @@ -59,6 +62,7 @@ namespace console { VariableAttributor<Variable> senf_console_add_node( DirectoryNode & node, Owner & owner, std::string const & name, Variable & var, int, typename boost::disable_if< boost::is_convertible<Variable*, ScopedDirectoryBase*> >::type * = 0, + typename boost::disable_if< boost::is_convertible<Variable*, GenericNode*> >::type * = 0, typename boost::disable_if_c<detail::ParsedCommandTraits<Variable>::is_callable>::type * = 0); template <class Variable, class Owner> -- GitLab