#include "Connectors.hh"
#include "EventManager.hh"
#include "ModuleManager.hh"
+#include <boost/lambda/lambda.hpp>
+#include <boost/lambda/bind.hpp>
+#include <algorithm>
#define prefix_ inline
-///////////////////////////////cci.p///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::module::Module
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::module::Module::v_init()
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<RouteBase> route)
{
return routes_.back();
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// public members
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);
}
return eventManager().now();
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::module::Module::Module()
eventManager().destroyModule(*this);
}
-///////////////////////////////cci.e///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
\f