Changed to colour every module ending with Source or Sink red
[senf.git] / senf / PPI / Connectors.cci
index f133b97..986a2a4 100644 (file)
@@ -26,6 +26,7 @@
 // Custom includes
 #include <senf/Utils/TypeInfo.hh>
 #include <senf/Utils/senfassert.hh>
+#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();
 }