/** \file
\brief Joins public header */
-#ifndef HH_Joins_
-#define HH_Joins_ 1
+#ifndef HH_SENF_PPI_Joins_
+#define HH_SENF_PPI_Joins_ 1
// Custom includes
#include <boost/ptr_container/ptr_vector.hpp>
#include "predecl.hh"
#include "Connectors.hh"
#include "Module.hh"
+#include "MultiConnectorMixin.hh"
//#include "Joins.mpp"
///////////////////////////////hh.p////////////////////////////////////////
namespace senf {
namespace ppi {
-#ifndef DOXYGEN
-
- template <class Source>
- connector::GenericPassiveInput & connect(Source & source, module::PassiveJoin & target);
-
- template <class Source>
- connector::GenericActiveInput & connect(Source & source, module::PriorityJoin & target);
-
-#endif
-
namespace module {
/** \brief Join multiple packet streams with passive inputs
\ingroup routing_modules
*/
class PassiveJoin
- : public Module
+ : public Module,
+ public MultiConnectorMixin<PassiveJoin, connector::PassiveInput<> >
{
SENF_PPI_MODULE(PassiveJoin);
public:
PassiveJoin();
private:
- connector::PassiveInput<> & newInput();
-
-#ifndef DOXYGEN
- // I didn't get template friend functions to work ...
- public:
-#endif
- template <class Source>
- connector::GenericPassiveInput & connect(Source & source);
-
- private:
+ void connectorSetup(connector::PassiveInput<> & conn);
void request(connector::GenericPassiveInput & input);
void onThrottle();
void onUnthrottle();
- typedef boost::ptr_vector<connector::PassiveInput<> > Inputs;
- Inputs inputs_;
+ friend class MultiConnectorMixin<PassiveJoin, connector::PassiveInput<> >;
};
/** \brief Join multiple packet streams with active inputs
\ingroup routing_modules
*/
class PriorityJoin
- : public Module
+ : public Module,
+ public MultiConnectorMixin<PriorityJoin, connector::ActiveInput<> >
{
SENF_PPI_MODULE(PriorityJoin);
public:
PriorityJoin();
private:
- connector::ActiveInput<> & newInput();
-
-#ifndef DOXYGEN
- public:
-#endif
- template <class Source>
- connector::GenericActiveInput & connect(Source & source);
-
- private:
+ void connectorSetup(PriorityJoin::ConnectorType & conn, int priority=-1);
void request();
void onThrottle();
void onUnthrottle();
- typedef boost::ptr_vector<connector::ActiveInput<> > Inputs;
- Inputs inputs_;
+ friend class MultiConnectorMixin<PriorityJoin, connector::ActiveInput<> >;
};
}}}
///////////////////////////////hh.e////////////////////////////////////////
#include "Joins.cci"
//#include "Joins.ct"
-#include "Joins.cti"
+//#include "Joins.cti"
#endif
\f