// Custom includes
#include <senf/Utils/TypeInfo.hh>
#include <senf/Utils/senfassert.hh>
+#include "Module.hh"
#define prefix_ inline
///////////////////////////////cci.p///////////////////////////////////////
+#ifdef SENF_PPI_NOTRACE
+# define SENF_PPI_THROTTLE_TRACE(label, type)
+# define SENF_PPI_TRACE(packet, label)
+#else
+# define SENF_PPI_THROTTLE_TRACE(label, type) throttleTrace(label, type)
+# define SENF_PPI_TRACE(packet, label) trace(packet, label)
+#endif
+
///////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::Connector
const
{
// The connector is not connected
- SENF_ASSERT(peer_ && "senf::ppi::connect() call missing");
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
return *peer_;
}
{
// 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_;
}
: peer_(), module_()
{}
-prefix_ senf::ppi::connector::Connector::~Connector()
-{
- if (connected()) {
- Connector & peer (*peer_);
- peer_->peer_ = 0;
- if (! peer.initializationScheduled())
- peer.enqueueInitializable();
- peer.v_disconnected();
- }
-}
-
prefix_ bool senf::ppi::connector::Connector::connected()
const
{
return peer_;
}
+prefix_ void senf::ppi::connector::Connector::unregisterConnector()
+{
+ if (module_)
+ module_->unregisterConnector(*this);
+}
+
////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle()
{
- throttleTrace("OUT", "throttle");
+ SENF_PPI_THROTTLE_TRACE("OUT", "throttle");
if (connected())
peer().notifyThrottle();
}
prefix_ void senf::ppi::connector::PassiveConnector::emitUnthrottle()
{
- throttleTrace("OUT", "unthrottle");
+ SENF_PPI_THROTTLE_TRACE("OUT", "unthrottle");
if (connected()) {
peer().notifyUnthrottle();
v_unthrottleEvent();
remoteThrottled_ = true;
}
-prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRoute & route)
-{
- routes_.push_back(&route);
-}
-
-// public members
+// public members
prefix_ bool senf::ppi::connector::PassiveConnector::nativeThrottled()
const
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()");
- if (!throttled())
+ SENF_ASSERT(callback_, "senf::ppi::connector::PassiveConnector: missing onRequest()");
+ if (!throttled()) {
callback_();
- else
- throttleTrace("IN ", "queueing packet");
+ } else {
+ SENF_PPI_THROTTLE_TRACE("IN ", "queueing packet");
+ }
}
///////////////////////////////////////////////////////////////////////////
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();
}
prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet const & p)
{
- trace(p, "OUT");
+ SENF_PPI_TRACE(p, "OUT");
if (connected())
peer().enqueue(p);
}