X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FModule.hh;h=42616e4525647c309f0b851e1cc6b4be1bd8dd4b;hb=dc4bee654ab0eef2fb6b1392e4328221d83e62f2;hp=aefe9a1aee51948c2a130e5abbdd0c414cfffda7;hpb=a4887e674af3fce4180cf7e14bedace928962025;p=senf.git diff --git a/PPI/Module.hh b/PPI/Module.hh index aefe9a1..42616e4 100644 --- a/PPI/Module.hh +++ b/PPI/Module.hh @@ -19,13 +19,15 @@ // 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 +#include //#include "Module.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -39,7 +41,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 +58,8 @@ namespace ppi { ~Module(); template - Route route(Source const & source, Target const & target); ///< Define flow information + Route & 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,7 +77,7 @@ namespace ppi { The return value may be used to alter routing parameters like throttling parameters. - + \param[in] source Data source, object which controlls incoming data \param[in] target Data target, object which controlls @@ -82,22 +85,19 @@ namespace ppi { \returns Route instance describing this route */ template - void noroute(Connector const & connector); ///It is mandatory to define routing - information for terminal connectors. - - 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. It is mandatory to define routing + information for terminal connectors. - \param[in] connector Terminal connector to declare */ + See the route() documentation for more on routing + + \param[in] connector Terminal connector to declare */ template - 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,19 +111,46 @@ 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 Automatically manage dynamic module deallocation + + The dynamicModule helper will create a new dynamically managed module instance. + + The \a args template parameter is only a placeholder. All arguments to dynamicModule will be + passed to the Module constructor. + + \implementation dynamicModule should just register the Instance in a different way with the + Infrastructure and return a reference to the new module. + */ + template + unspecified dynamicModule(Args args); + + + /** \brief Connect compatible connectors + + connect() will connect two compatible connectors: One connector must be active, the other + passive. + */ + template + void connect(Source const & source, Target const & target); + + /** \brief Connect connectors via an adaptor module + + This connect() overload will insert an additional adaptor module into the connection. The + Adaptor module must have two connectors, \a input and \a output. The call will setup the + connections \a source to \a input and \a output to \a target. Each connector pair must be + compatible. + */ + template