X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FRoute.hh;h=307d3418972fd950d7376276070687c791b8072a;hb=9035ae419b1dc9dc537e00d0f7ffc4b22e19422a;hp=f765152048628b9e57f28a0d285b784ebbd212e6;hpb=7465ea4f6d3d54622bd783106cf8b60d5f133343;p=senf.git diff --git a/PPI/Route.hh b/PPI/Route.hh index f765152..307d341 100644 --- a/PPI/Route.hh +++ b/PPI/Route.hh @@ -34,6 +34,11 @@ namespace senf { namespace ppi { + /** \brief Routing base class + + Routing information is defined within each module to define the control flow. RouteBase is + the generic base class for all routing entries. + */ class RouteBase { public: @@ -46,11 +51,17 @@ namespace ppi { module::Module * module_; }; + /** \brief Forwarding route base class + + All routes which may forward control information are based on + ForwardingRoute. ForwardingRoute provides methods to control and query the throttling + behavior. + */ class ForwardingRoute : public RouteBase { public: - bool autoThrottling(); + bool autoThrottling() const; ///< Query current autoThrottling state void autoThrottling(bool state); ///< Change automatic throttle notification forwarding /**< By default, throttle notifications are automatically forwarded from active to passive connectors. This may @@ -65,12 +76,17 @@ namespace ppi { comes in. Respective for unthrottle notifications. \param[in] state New throttle forwarding state */ + + bool throttled() const; ///< \c true, if the route is throttled + /**< This member checks only the automatic throttling + state. If autoThrottling() is \c false, this member + will always return \c false. */ protected: ForwardingRoute(module::Module & module); // Called to register this route with the connectors forwarding information base - void registerRoute(connector::ActiveConnector & connector); + template void registerRoute(T & ob); template void notifyThrottle(T & ob); template void notifyUnthrottle(T & ob); @@ -83,6 +99,7 @@ namespace ppi { // Implemented in the derived classes to forward throttling notifications virtual void v_notifyThrottle() = 0; virtual void v_notifyUnthrottle() = 0; + virtual bool v_throttled() const = 0; bool autoThrottling_; @@ -101,13 +118,17 @@ namespace ppi { Route instances are created by Module::route statements. The Route class provides an interface to manipulate the flow processing. + + The concrete interface provided depends on the type of route. If the route is a forwarding + route, it will be based on ForwardingRoute otherwise it will be based directly on + RouteBase. */ template class Route : public detail::RouteImplementation { - typedef detail::RouteImplementation Base; private: + typedef detail::RouteImplementation Base; typedef detail::RouteImplementation Implementation; Route(module::Module & module, Source & source, Target & target);