/** \file
\brief Setup public header */
-#ifndef HH_Setup_
-#define HH_Setup_ 1
+#ifndef HH_SENF_PPI_Setup_
+#define HH_SENF_PPI_Setup_ 1
// Custom includes
#include <boost/type_traits.hpp>
namespace senf {
namespace ppi {
+#ifdef DOXYGEN
+
/** \brief Connect modules
senf::ppi::connect() establishes a connection between two modules or, to be more precise,
\li Either or both of the connectors are untyped (they accept/send arbitrary senf::Packet's)
\li Both connectors send/accept the exactly same packet type.
+ Depending on the type of input or output, the connect call may require additional
+ arguments. See the respective module documentation for more information
+
\throws connector::IncompatibleConnectorsException if the two connectors are not type
compatible.
\see \ref ppi_connections
*/
- void connect(connector::GenericActiveOutput & source, connector::GenericPassiveInput & target);
+ void connect(connector::OutputConnector & source, connector::InputConnector & target, ...);
- /** \brief Connect modules
- \see connect() */
+#else
+
+ void connect(connector::GenericActiveOutput & source, connector::GenericPassiveInput & target);
void connect(connector::GenericPassiveOutput & source, connector::GenericActiveInput & target);
+#endif
+
#ifndef DOXYGEN
template <class T, class C>
void connect(T & source, C & target,
typename boost::disable_if< boost::is_base_of<connector::Connector, T> >::type * = 0,
- typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type * = 0);
+ typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type * = 0,
+ typename boost::disable_if< boost::is_base_of<connector::Jack, T> >:: type * = 0);
template <class C, class T>
void connect(C & source, T & target,
typename boost::enable_if< boost::is_base_of<connector::Connector, C> >::type * = 0,
- typename boost::disable_if< boost::is_base_of<connector::Connector,T> >::type * = 0);
+ typename boost::disable_if< boost::is_base_of<connector::Connector,T> >::type * = 0,
+ typename boost::disable_if< boost::is_base_of<connector::Jack, T> >:: type * = 0);
template <class T1, class T2>
void connect(T1 & source, T2 & target,
typename boost::disable_if< boost::is_base_of<connector::Connector, T1> >::type * = 0,
- typename boost::disable_if< boost::is_base_of<connector::Connector, T2> >::type * = 0);
+ typename boost::disable_if< boost::is_base_of<connector::Connector, T2> >::type * = 0,
+ typename boost::disable_if< boost::is_base_of<connector::Jack, T1> >:: type * = 0,
+ typename boost::disable_if< boost::is_base_of<connector::Jack, T2> >:: type * = 0);
#endif