// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
\brief Connectors non-inline non-template implementation */
#include "Connectors.hh"
-//#include "Connectors.ih"
+#include "Connectors.ih"
// Custom includes
#include "Route.hh"
+#include "Module.hh"
//#include "Connectors.mpp"
#define prefix_
///////////////////////////////cc.p////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
+// senf::ppi::connector::Connector
+
+prefix_ void senf::ppi::connector::Connector::connect(Connector & target)
+{
+ SENF_ASSERT( module_ && ! peer_ && target.module_ && ! target.peer_ );
+ if (! (packetTypeID() == typeid(void) ||
+ target.packetTypeID() == typeid(void) ||
+ packetTypeID() == target.packetTypeID()) )
+ throw IncompatibleConnectorsException()
+ << ": " << prettyName(packetTypeID())
+ << " [in module " << prettyName(typeid(*module_)) << "] "
+ << ", " << prettyName(target.packetTypeID())
+ << " [in module " << prettyName(typeid(*target.module_)) << "]";
+
+ peer_ = & target;
+ target.peer_ = this;
+}
+
+prefix_ std::type_info const & senf::ppi::connector::Connector::packetTypeID()
+{
+ return typeid(void);
+}
+
+///////////////////////////////////////////////////////////////////////////
// senf::ppi::connector::PassiveConnector
////////////////////////////////////////
{}
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::connector::ActiveInput
+// senf::ppi::connector::GenericActiveInput
////////////////////////////////////////
// private members
-prefix_ void senf::ppi::connector::ActiveInput::v_requestEvent()
+prefix_ void senf::ppi::connector::GenericActiveInput::v_requestEvent()
{
request();
}
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::connector::PassiveInput
+// senf::ppi::connector::GenericPassiveInput
////////////////////////////////////////
// private members
-prefix_ void senf::ppi::connector::PassiveInput::v_enqueueEvent()
+prefix_ void senf::ppi::connector::GenericPassiveInput::v_enqueueEvent()
{
emit();
qdisc_->update(*this, QueueingDiscipline::ENQUEUE);
}
-prefix_ void senf::ppi::connector::PassiveInput::v_dequeueEvent()
+prefix_ void senf::ppi::connector::GenericPassiveInput::v_dequeueEvent()
{
qdisc_->update(*this, QueueingDiscipline::DEQUEUE);
}
-prefix_ void senf::ppi::connector::PassiveInput::v_unthrottleEvent()
+prefix_ void senf::ppi::connector::GenericPassiveInput::v_unthrottleEvent()
{
size_type n (queueSize());
while (n) {