Utils/Console: Add ValueRange utility
[senf.git] / PPI / Joins.hh
index 266e807..6c260c0 100644 (file)
@@ -31,6 +31,7 @@
 #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
@@ -70,7 +61,8 @@ namespace module {
         \ingroup routing_modules
      */
     class PassiveJoin
-        : public Module
+        : public Module,
+          public MultiConnectorMixin<PassiveJoin, connector::PassiveInput<> >
     {
         SENF_PPI_MODULE(PassiveJoin);
     public:
@@ -79,22 +71,12 @@ namespace module {
         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
@@ -124,7 +106,8 @@ namespace module {
         \ingroup routing_modules
      */
     class PriorityJoin
-        : public Module
+        : public Module,
+          public MultiConnectorMixin<PriorityJoin, connector::ActiveInput<> >
     {
         SENF_PPI_MODULE(PriorityJoin);
     public:
@@ -133,21 +116,12 @@ namespace module {
         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<> >;
     };
 
 }}}
@@ -155,7 +129,7 @@ namespace module {
 ///////////////////////////////hh.e////////////////////////////////////////
 #include "Joins.cci"
 //#include "Joins.ct"
-#include "Joins.cti"
+//#include "Joins.cti"
 #endif
 
 \f