#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) trace(packet, label)
#endif
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::Connector
prefix_ senf::ppi::connector::Connector & senf::ppi::connector::Connector::peer()
return traceState_;
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::connector::Connector::Connector()
: 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::Connector::setModule(module::Module & module)
-{
- module_ = &module;
-}
-
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::PassiveConnector
prefix_ senf::ppi::connector::ActiveConnector & senf::ppi::connector::PassiveConnector::peer()
const
{
- return dynamic_cast<ActiveConnector&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ bool senf::ppi::connector::PassiveConnector::throttled()
return nativeThrottled_ || remoteThrottled_;
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::PassiveConnector::emitThrottle()
remoteThrottled_ = true;
}
-prefix_ void senf::ppi::connector::PassiveConnector::registerRoute(ForwardingRoute & route)
-{
- routes_.push_back(&route);
-}
-
-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()
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::connector::PassiveConnector::PassiveConnector()
}
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::ActiveConnector
prefix_ senf::ppi::connector::PassiveConnector & senf::ppi::connector::ActiveConnector::peer()
const
{
- return dynamic_cast<PassiveConnector&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ void senf::ppi::connector::ActiveConnector::onThrottle()
return ! connected() || peer().throttled();
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::connector::ActiveConnector::ActiveConnector()
: throttleCallback_(), unthrottleCallback_(), notifyRoutes_(), throttled_(false)
{}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::InputConnector
prefix_ senf::Packet senf::ppi::connector::InputConnector::read()
prefix_ senf::ppi::connector::OutputConnector & senf::ppi::connector::InputConnector::peer()
const
{
- return dynamic_cast<OutputConnector &>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ senf::ppi::connector::InputConnector::queue_iterator
return queue_.empty();
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::connector::InputConnector::InputConnector()
{}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// private members
prefix_ void senf::ppi::connector::InputConnector::enqueue(Packet const & p)
v_enqueueEvent();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::OutputConnector
prefix_ senf::ppi::connector::InputConnector & senf::ppi::connector::OutputConnector::peer()
const
{
- return dynamic_cast<InputConnector&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ void senf::ppi::connector::OutputConnector::operator()(Packet const & p)
operator()(p);
}
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// protected members
prefix_ senf::ppi::connector::OutputConnector::OutputConnector()
{}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericPassiveInput
prefix_ senf::ppi::connector::GenericPassiveInput::GenericPassiveInput()
prefix_ senf::ppi::connector::GenericActiveOutput & senf::ppi::connector::GenericPassiveInput::peer()
const
{
- return dynamic_cast<GenericActiveOutput&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ bool senf::ppi::connector::GenericPassiveInput::boolean_test()
return ! empty();
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericPassiveOutput
prefix_ senf::ppi::connector::GenericActiveInput & senf::ppi::connector::GenericPassiveOutput::peer()
const
{
- return dynamic_cast<GenericActiveInput&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ bool senf::ppi::connector::GenericPassiveOutput::boolean_test()
prefix_ senf::ppi::connector::GenericPassiveOutput::GenericPassiveOutput()
{}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericActiveInput
prefix_ senf::ppi::connector::GenericPassiveOutput & senf::ppi::connector::GenericActiveInput::peer()
const
{
- return dynamic_cast<GenericPassiveOutput&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ bool senf::ppi::connector::GenericActiveInput::boolean_test()
prefix_ senf::ppi::connector::GenericActiveInput::GenericActiveInput()
{}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::GenericActiveOutput
prefix_ senf::ppi::connector::GenericPassiveInput & senf::ppi::connector::GenericActiveOutput::peer()
const
{
- return dynamic_cast<GenericPassiveInput&>(Connector::peer());
+ SENF_ASSERT(peer_, "senf::ppi::connect() call missing");
+ return *peer_;
}
prefix_ bool senf::ppi::connector::GenericActiveOutput::boolean_test()
prefix_ senf::ppi::connector::GenericActiveOutput::GenericActiveOutput()
{}
-///////////////////////////////cci.e///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
\f