X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FModule.cci;h=78b7be3d564169364ec0d47736a577890babc0b1;hb=78a6e233083efa63a9cd0684a92abc64202a9ee7;hp=3f0817d3e1ee7ae3d55aae1cc693ee04aff92579;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/PPI/Module.cci b/senf/PPI/Module.cci index 3f0817d..78b7be3 100644 --- a/senf/PPI/Module.cci +++ b/senf/PPI/Module.cci @@ -28,6 +28,9 @@ #include "Connectors.hh" #include "EventManager.hh" #include "ModuleManager.hh" +#include +#include +#include #define prefix_ inline ///////////////////////////////cci.p/////////////////////////////////////// @@ -55,13 +58,28 @@ prefix_ senf::ppi::ModuleManager & senf::ppi::module::Module::moduleManager() prefix_ void senf::ppi::module::Module::registerConnector(connector::Connector & connector) { - if (std::find(connectorRegistry_.begin(), connectorRegistry_.end(), &connector) + if (std::find(connectorRegistry_.begin(), connectorRegistry_.end(), &connector) == connectorRegistry_.end()) { connectorRegistry_.push_back(&connector); connector.setModule(*this); } } +prefix_ void senf::ppi::module::Module::unregisterConnector(connector::Connector & connector) +{ + ConnectorRegistry::iterator i (std::find(connectorRegistry_.begin(), connectorRegistry_.end(), + &connector)); + if (i != connectorRegistry_.end()) + connectorRegistry_.erase(i); + + routes_.erase_if(boost::bind(&RouteBase::hasConnector, _1, boost::cref(connector))); +} + +prefix_ void senf::ppi::module::Module::unregisterEvent(EventDescriptor & event) +{ + routes_.erase_if(boost::bind(&RouteBase::hasEvent, _1, boost::cref(event))); +} + prefix_ senf::ppi::RouteBase & senf::ppi::module::Module::addRoute(std::auto_ptr route) { @@ -74,6 +92,11 @@ senf::ppi::module::Module::addRoute(std::auto_ptr route) prefix_ senf::ppi::module::Module::~Module() { + SENF_ASSERT(connectorRegistry_.empty(), + "Internal failure: connectors still registered in Module destructor ??"); + SENF_ASSERT(routes_.empty(), + "internal failure: routes still registered in Module destructor ??"); + moduleManager().unregisterModule(*this); }