};
\endcode
+
+ \section ppi_jacks Jacks
+
+ A Jack is a packet type aware and possibly packet type converting reference to an arbitrary
+ connector of the same type. Jacks are used in groups to indirectly declare the input's and
+ output's
+
+ \code
+ class MyGroup
+ {
+ private:
+ senf::ppi::module::PassiveQueue queue;
+ senf::ppi::module::RateAnalyzer analyzer;
+
+ public:
+ senf::ppi::connector::ActiveInputJack<senf::EthernetPacket> input;
+ senf::ppi::connector::ActiveOutputJack<senf::EthernetPacket> output;
+
+ MyGroup()
+ : queue (), analyzer (), input (queue.input), output (analyzer.output)
+ {
+ senf::ppi::connect(queue, analyzer);
+ }
+ };
+ \endcode
+
+ The jacks are initialized by passing an arbitrary compatible connector to the jack
+ constructor. A connector is compatible, if
+ \li It has the same input/output active/passive specification
+ \li Either the Jack or the Connector are generic (senf::Packet) or Jack and Connector have
+ the same packet type
+
+ Jacks can be used wherever connectors may be used. Jacks may be defined anywhere, not only
+ in modules. It is however important to ensure that the lifetime of the jack does not exceed
+ the lifetime of the referenced connector.
+
\see
senf::ppi::module::Module \n
senf::ppi::connect() \n
namespace ppi {
namespace connector {
+ /** \brief Connector Jack base class
+ \see \ref ppi_jacks */
class Jack
: private boost::noncopyable
{};
+ /** \brief Jack referencing an ActiveInput
+ \see \ref ppi_jacks */
class GenericActiveInputJack
: public Jack
{
public:
explicit GenericActiveInputJack(GenericActiveInput & input);
- GenericActiveInput & connector();
+ GenericActiveInput & connector(); ///< Get referenced connector
private:
GenericActiveInput & input_;
};
+ /** \brief Jack referencing an ActiveOutput
+ \see \ref ppi_jacks */
class GenericActiveOutputJack
: public Jack
{
public:
explicit GenericActiveOutputJack(GenericActiveOutput & output);
- GenericActiveOutput & connector();
+ GenericActiveOutput & connector(); ///< Get referenced connector
private:
GenericActiveOutput & output_;
};
+ /** \brief Jack referencing a PassiveInput
+ \see \ref ppi_jacks */
class GenericPassiveInputJack
: public Jack
{
public:
explicit GenericPassiveInputJack(GenericPassiveInput & input);
- GenericPassiveInput & connector();
+ GenericPassiveInput & connector(); ///< Get referenced connector
private:
GenericPassiveInput & input_;
};
+ /** \brief Jack referencing a PassiveOutput
+ \see \ref ppi_jacks */
class GenericPassiveOutputJack
: public Jack
{
public:
explicit GenericPassiveOutputJack(GenericPassiveOutput & output);
- GenericPassiveOutput & connector();
+ GenericPassiveOutput & connector(); ///< Get referenced connector
private:
GenericPassiveOutput & output_;
};
+ /** \brief Jack with packet type referencing an ActiveInput
+ \see \ref ppi_jacks */
template <class PacketType=Packet>
class ActiveInputJack
: public GenericActiveInputJack
#endif
+ /** \brief Jack with packet type referencing an ActiveOutput
+ \see \ref ppi_jacks */
template <class PacketType=Packet>
class ActiveOutputJack
: public GenericActiveOutputJack
#endif
+ /** \brief Jack with packet type referencing a PassiveInput
+ \see \ref ppi_jacks */
template <class PacketType=Packet>
class PassiveInputJack
: public GenericPassiveInputJack
#endif
+ /** \brief Jack with packet type referencing a PassiveOutput
+ \see \ref ppi_jacks */
template <class PacketType=Packet>
class PassiveOutputJack
: public GenericPassiveOutputJack