diff --git a/PPI/Setup.cti b/PPI/Setup.cti index f18f8b4840d132e17d9d8e6b248d362d14beea16..509bbb112a8ea0099932262f9426841e68bc2044 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 3c21bc95b60ce7fd2f3f63fcbaa48bcbd7ed410a..59228c229b474e502e18313b345ae3875b4a0af6 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 fcd44d0d12e51f1d5021fd1b72c9f27974c99dfb..3e796ecb785f65c9b18328bc4876649e9b42a0f5 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 6fedea2d3f6aa6519ca837db4a65460bf3bb9b6e..b93344cf45aee79d4a3387df243f143b5eadc2b8 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 512386e371a71ae9a72eab5f2885985f352b43f1..1712f9f325f3251746cb41373f06c200b43334b4 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 3c7fd8ed88673aaff6eae48cad8e7e2976f6087d..f428842b5bf0ce61ae1168148726b8c497731733 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 13fb7872d5f1d5104e31cd697fe170b8d442d1ee..870f2ed7a10f1aec239f54b64efe4ddb9e8b1937 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>