Packets: Add descriptive dump() output to DataPacket
[senf.git] / PPI / Setup.hh
index ae9c743..021d528 100644 (file)
@@ -1,8 +1,8 @@
 // $Id$
 //
-// Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
 namespace senf {
 namespace ppi {
 
-#ifndef DOXYGEN    
-
-    void connect(connector::ActiveOutput & source, connector::PassiveInput & target);
-    void connect(connector::PassiveOutput & source, connector::ActiveInput & target);
-    
-    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);
-
-    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);
-
-    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);
-
-#else
-
     /** \brief Connect modules
 
         senf::ppi::connect() establishes a connection between two modules or, to be more precise,
@@ -69,14 +47,38 @@ namespace ppi {
         as \a source argument. In the same way, if a module has an input connector called \c input,
         the module may be given directly as \a target argument. This simplifies the most common case
         of a module with one input and one output connector.
+
+        The connect call will check at runtime, whether the two connectors are type-compatible:
+        \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.
+
+        \throws connector::IncompatibleConnectorsException if the two connectors are not type
+            compatible.
         
         \see \ref ppi_connections
      */
-    void connect(connector::ActiveInput & source, connector::PassiveOutput & target);
+    void connect(connector::GenericActiveOutput & source, connector::GenericPassiveInput & target);
 
     /** \brief Connect modules
         \see connect() */
-    void connect(connector::PassiveInput & source, connector::ActiveOutput & target);
+    void connect(connector::GenericPassiveOutput & source, connector::GenericActiveInput & target);
+
+#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);
+
+    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);
+
+    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);
 
 #endif