X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FConnectors.cci;h=986a2a4f8fb5f4be96366c7c85c3debf14532b19;hb=ff4249b4a9c23236b2e56dcd593c91a5c58f7b75;hp=f133b97d71db8f36b3ccc0c17e11d6c5e1233a02;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/PPI/Connectors.cci b/senf/PPI/Connectors.cci index f133b97..986a2a4 100644 --- a/senf/PPI/Connectors.cci +++ b/senf/PPI/Connectors.cci @@ -26,6 +26,7 @@ // Custom includes #include #include +#include "Module.hh" #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// @@ -37,7 +38,7 @@ prefix_ senf::ppi::connector::Connector & senf::ppi::connector::Connector::peer( const { // The connector is not connected - SENF_ASSERT(peer_ && "senf::ppi::connect() call missing"); + SENF_ASSERT(peer_, "senf::ppi::connect() call missing"); return *peer_; } @@ -46,7 +47,7 @@ prefix_ senf::ppi::module::Module & senf::ppi::connector::Connector::module() { // The connector is not registered in the module -> probably a route() or noroute() statement is // missing. - SENF_ASSERT(module_ && "Connector not registered: Missing route() or noroute()"); + SENF_ASSERT(module_, "Connector not registered: Missing route() or noroute()"); return *module_; } @@ -72,7 +73,9 @@ prefix_ senf::ppi::connector::Connector::~Connector() if (connected()) { Connector & peer (*peer_); peer_->peer_ = 0; - peer.v_init(); + if (! peer.initializationScheduled()) + peer.enqueueInitializable(); + peer.v_disconnected(); } } @@ -82,6 +85,12 @@ prefix_ bool senf::ppi::connector::Connector::connected() return peer_; } +prefix_ void senf::ppi::connector::Connector::unregisterConnector() +{ + if (module_) + module_->unregisterConnector(*this); +} + //////////////////////////////////////// // private members @@ -139,7 +148,14 @@ prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRou routes_.push_back(&route); } -// public members +prefix_ void senf::ppi::connector::PassiveConnector::unregisterRoute(ForwardingRoute & route) +{ + Routes::iterator i (std::find(routes_.begin(), routes_.end(), &route)); + if (i != routes_.end()) + routes_.erase(i); +} + +// public members prefix_ bool senf::ppi::connector::PassiveConnector::nativeThrottled() const @@ -176,7 +192,7 @@ prefix_ senf::ppi::connector::PassiveConnector::PassiveConnector() prefix_ void senf::ppi::connector::PassiveConnector::emit() { // No event callback has been registered (onRequest() call missing) - SENF_ASSERT(callback_ && "senf::ppi::connector::PassiveConnector: missing onRequest()"); + SENF_ASSERT(callback_, "senf::ppi::connector::PassiveConnector: missing onRequest()"); if (!throttled()) callback_(); else @@ -247,7 +263,7 @@ prefix_ senf::Packet senf::ppi::connector::InputConnector::peek() const { // Cannot peek() head of empty queue - SENF_ASSERT( ! queue_.empty() && + SENF_ASSERT( ! queue_.empty(), "senf::ppi::connector::InputConnector: cannot call peek() on empty queue" ); return queue_.back(); }