X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.hh;h=1b7e5403fd2f91525fdf5539719854d73a2fad07;hb=2246ca853064965a7b263c49597c4e74397b989b;hp=e37ad1f2cc74ceaec60f0ae4b3260a83cd6a2ad0;hpb=7231c220a7332754de3d16e4e8aacd5dbd31c501;p=senf.git diff --git a/PPI/Connectors.hh b/PPI/Connectors.hh index e37ad1f..1b7e540 100644 --- a/PPI/Connectors.hh +++ b/PPI/Connectors.hh @@ -1,6 +1,8 @@ +// $Id$ +// // Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -21,22 +23,6 @@ /** \file \brief Connectors public header */ -/** \defgroup connectors Connector classes - - A connector has two independent properties - \li it may be \e active or \e passive - \li it may be an \e input or an \e output - - \e Active connectors are activated from within the module, \e passive connectors are signaled by - the external framework. \e Input modules receive packets, \e output modules send packets. - - All passive connectors call some onRequest callback whenever I/O needs to be performed. All - input modules possess a packet queue. - - We therefore have 4 connector types: senf::ppi::ActiveInput, senf::ppi::ActiveOutput, - senf::ppi::PassiveInput and senf::ppi::PassiveOutput. - */ - #ifndef HH_Connectors_ #define HH_Connectors_ 1 @@ -44,8 +30,8 @@ #include #include #include -#include "Utils/SafeBool.hh" -#include "Packets/Packets.hh" +#include "../Utils/safe_bool.hh" +#include "../Packets/Packets.hh" #include "predecl.hh" #include "detail/Callback.hh" #include "Queueing.hh" @@ -59,6 +45,31 @@ namespace connector { /** \namespace senf::ppi::connector \brief Connector classes + + A connector has two independent properties + \li it may be \e active or \e passive + \li it may be an \e input or an \e output + + \e Active connectors are activated from within the module, \e passive connectors are + signaled by the external framework. \e Input modules receive packets, \e output modules send + packets. + + All passive connectors call some onRequest callback whenever I/O needs to be performed. All + input modules possess a packet queue. + + We therefore have 4 connector types: + \li senf::ppi::connector::ActiveInput + \li senf::ppi::connector::ActiveOutput + \li senf::ppi::connector::PassiveInput + \li senf::ppi::connector::PassiveOutput. + + Connectors are declared as module data members and are then externally connected to other + modules. + + \see + senf::ppi::module::Module \n + senf::ppi::connect() + \ref ppi_connectors */ /** \brief Connector base-class @@ -200,7 +211,7 @@ namespace connector { holds this input. In the second case, the pointer will automatically be bound to the containing instance. - \param[in] handle Handler to call on unthrottle + \param[in] handler Handler to call on unthrottle notifications. */ void onUnthrottle(); ///< Clear unthrottle notification handler @@ -257,6 +268,7 @@ namespace connector { typedef Queue::const_iterator queue_iterator; ///< Iterator type of the embedded queue typedef Queue::size_type size_type; ///< Unsigned type for counting queue elements + Packet operator()(); ///< Get a packet /**< This member is the primary method to access received data. On passive connectors, this operator will just @@ -267,6 +279,8 @@ namespace connector { logic error in the module implementation and an exception is raised. */ + Packet read(); ///< Alias for operator()() + OutputConnector & peer() const; queue_iterator begin() const; ///< Access queue begin (head) @@ -301,7 +315,9 @@ namespace connector { : public virtual Connector { public: - void operator()(Packet p); ///< Send out a packet + void operator()(Packet p); ///< Send out a packet + + void write(Packet p); ///< Alias for operator()(Packet p) InputConnector & peer() const; @@ -309,9 +325,6 @@ namespace connector { OutputConnector(); }; - ///@{ - ///\addtogroup connectors - /** \brief Combination of PassiveConnector and InputConnector The PassiveInput automatically controls the connectors throttling state using a queueing @@ -323,7 +336,7 @@ namespace connector { */ class PassiveInput : public PassiveConnector, public InputConnector, - public SafeBool + public safe_bool { public: PassiveInput(); @@ -351,7 +364,7 @@ namespace connector { */ class PassiveOutput : public PassiveConnector, public OutputConnector, - public SafeBool + public safe_bool { public: ActiveInput & peer() const; @@ -367,7 +380,7 @@ namespace connector { */ class ActiveInput : public ActiveConnector, public InputConnector, - public SafeBool + public safe_bool { public: PassiveOutput & peer() const; @@ -384,7 +397,7 @@ namespace connector { */ class ActiveOutput : public ActiveConnector, public OutputConnector, - public SafeBool + public safe_bool { public: PassiveInput & peer() const; @@ -394,8 +407,6 @@ namespace connector { void connect(PassiveInput & target); ///< Internal: Use senf::ppi::connect() instead }; - ///@} - }}} ///////////////////////////////hh.e////////////////////////////////////////