#define HH_Route_ 1
// Custom includes
+#include <boost/type_traits.hpp>
+#include "predecl.hh"
//#include "Route.mpp"
///////////////////////////////hh.p////////////////////////////////////////
namespace senf {
namespace ppi {
- /** \brief Route descriptor
-
- Route instances are created by Module::route statements. The Route class provides an
- interface to manipulate the flow processing.
- */
- template <class Source, class Target>
- class Route
+ class RouteBase
+ {
+ public:
+ virtual ~RouteBase();
+
+ protected:
+ RouteBase(module::Module & module);
+
+ private:
+ module::Module * module_;
+ };
+
+ class ForwardingRoute
+ : public RouteBase
{
public:
+ bool autoThrottling();
void autoThrottling(bool state); ///< Change automatic throttle notification forwarding
/**< By default, throttle notifications are automatically
forwarded from active to passive connectors. This may
disable the event whenever a throttling notification
comes in. Respective for unthrottle notifications.
- \param[in] state New throttle forwarding state
+ \param[in] state New throttle forwarding state */
+
+ protected:
+ ForwardingRoute(module::Module & module);
+
+ // Called to register this route with the connectors forwarding information base
+ void registerRoute(connector::ActiveConnector & connector);
+
+ private:
+ // called to forward a throttling notification along the route
+ void notifyThrottle();
+ void notifyUnthrottle();
+
+ // Implemented in the derived classes to forward throttling notifications
+ virtual void v_notifyThrottle() = 0;
+ virtual void v_notifyUnthrottle() = 0;
+
+ bool autoThrottling_;
+
+ friend class connector::ActiveConnector;
+ };
+
+}}
+
+// We need detail::RouteImplementation here ...
+#include "Route.ih"
+
+namespace senf {
+namespace ppi {
+
+ /** \brief Route descriptor
+
+ Route instances are created by Module::route statements. The Route class provides an
+ interface to manipulate the flow processing.
+ */
+ template <class Source, class Target>
+ class Route
+ : public detail::RouteImplementation<Source,Target>
+ {
+ private:
+ typedef detail::RouteImplementation<Source,Target> Implementation;
+
+ Route(module::Module & module, Source & source, Target & target);
- \implementation This class will be implemented using a
- baseclass, this template and several
- specializations. However, this is an implementation
- detail which does not affect the exposed
- interface. */
+ friend class module::Module;
};
}}
///////////////////////////////hh.e////////////////////////////////////////
-//#include "Route.cci"
+#include "Route.cci"
//#include "Route.ct"
-//#include "Route.cti"
+#include "Route.cti"
#endif
\f