Socket/Protocols/INet: Updated INet4SocketAddress to use INet4Address
[senf.git] / PPI / Module.hh
index aefe9a1..30d52d9 100644 (file)
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Module public header */
+    \brief Module public header 
+*/
 
 #ifndef HH_Module_
 #define HH_Module_ 1
 
 // Custom includes
 #include <boost/utility.hpp>
+#include <boost/date_time/posix_time/posix_time_types.hpp>
 
 //#include "Module.mpp"
 ///////////////////////////////hh.p////////////////////////////////////////
 
 namespace senf {
 namespace ppi {
+namespace module {
 
     /** \brief Module baseclass
 
@@ -39,7 +42,7 @@ namespace ppi {
         with interfaces to several PPI facilities:
         
         \li Connector management
-        \li Flow management
+        \li Flow management (routing)
         \li Event handling
 
         To provide internal bookkeeping, most access to the PPI infrastructure is managed through
@@ -56,7 +59,8 @@ namespace ppi {
         ~Module();
 
         template <class Source, class Target>
-        Route route(Source const & source, Target const & target); ///< Define flow information
+        Route<Source, Target> & route(Source const & source, Target const & target); 
+                                        ///< Define flow information
                                         /**< Using the route() and noroute() members, the
                                              information flow within the module is defined. Routing
                                              may be specified either between inputs, outputs and
@@ -74,30 +78,27 @@ namespace ppi {
 
                                              The return value may be used to alter routing
                                              parameters like throttling parameters.
-
-                                             \param[in] source Data source, object which controlls
+                                             
+                                             \param[in] source Data source, object which controls
                                                  incoming data
-                                             \param[in] target Data target, object which controlls
+                                             \param[in] target Data target, object which controls
                                                  outgoing data
                                              \returns Route instance describing this route */
 
         template <class Connector>
-        void noroute(Connector const & connector); ///<Define terminal connectors
-                                        /**<
-            
-                                            The noroute() member explicitly declares, that a
-                                            connector is terminal and does not directly
-                                            receive/forward data from/to some other
-                                            connector. <em>It is mandatory to define routing
-                                            information for terminal connectors</em>.
-
-                                            See the route() documentation for more on routing
+        void noroute(Connector const & connector); ///< Define terminal connectors
+                                        /**< The noroute() member explicitly declares, that a
+                                             connector is terminal and does not directly
+                                             receive/forward data from/to some other
+                                             connector. <em>It is mandatory to define routing
+                                             information for terminal connectors</em>.
 
-                                            \param[in] connector Terminal connector to declare */
+                                             See the route() documentation for more on routing
+                                             
+                                             \param[in] connector Terminal connector to declare */
 
         template <class Target, class Descriptor>
-        typename Descriptor::EventBinding const registerEvent(Target target, 
-                                                              Descriptor const & descriptor);
+        void registerEvent(Target target, Descriptor const & descriptor);
                                         ///< Register an external event
                                         /**< The \a target argument may be either an arbitrary
                                              callable object or it may be a member function pointer
@@ -111,20 +112,23 @@ namespace ppi {
                                              may be a timer event or some type of I/O event on a
                                              file descriptor or socket.
 
-                                             The return value may be used to modify the
-                                             binding. This allows to temporarily inhibit event
-                                             delivery or to remove the binding explicitly. Depending
-                                             on the type of event, other operations may be
-                                             possible. See the event descriptor documentation.
-            
-                                            \param[in] target The handler to call whenever the event
-                                                is signaled
-                                            \param[in] descriptor The type of event to register
-                                            \returns An event binding instance of the appropriate
-                                                type. */
+                                             \param[in] target The handler to call whenever the
+                                                 event is signaled
+                                             \param[in] descriptor The type of event to register */
+
+        boost::posix_time::ptime eventTime(); ///< Return timestamp of the currently processing
+                                              ///< event
     };
 
-}}
+    /** \brief Connect compatible connectors
+
+        connect() will connect two compatible connectors: One connector must be active, the other
+        passive.
+     */
+    template <class Source, class Target>
+    void connect(Source const & source, Target const & target);
+
+}}}
 
 ///////////////////////////////hh.e////////////////////////////////////////
 //#include "Module.cci"
@@ -139,4 +143,6 @@ namespace ppi {
 // c-file-style: "senf"
 // indent-tabs-mode: nil
 // ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// comment-column: 40
 // End: