Fix documentation build under maverick (doxygen 1.7.1)
[senf.git] / senf / PPI / Module.cci
index 3f0817d..e967b4c 100644 (file)
 #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()
@@ -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<RouteBase> route)
 {
@@ -69,11 +87,16 @@ 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);
 }
 
@@ -89,7 +112,7 @@ prefix_ senf::ClockService::clock_type senf::ppi::module::Module::now()
     return eventManager().now();
 }
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 prefix_ senf::ppi::module::Module::Module()
@@ -108,7 +131,7 @@ prefix_ void senf::ppi::module::Module::destroy()
     eventManager().destroyModule(*this);
 }
 
-///////////////////////////////cci.e///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 
 \f