X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.cc;h=e11e5e23307733c50042d1524458d40c59dfab36;hb=7527fa188b41bd1e1ce1eb55777bfe360eb8373e;hp=224eab2ae8c1c0045007903f0e78ab192939cd71;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/PPI/Connectors.cc b/PPI/Connectors.cc index 224eab2..e11e5e2 100644 --- a/PPI/Connectors.cc +++ b/PPI/Connectors.cc @@ -1,8 +1,8 @@ // $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 // // This program is free software; you can redistribute it and/or modify @@ -24,16 +24,41 @@ \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 //////////////////////////////////////// @@ -116,34 +141,34 @@ prefix_ void senf::ppi::connector::InputConnector::v_dequeueEvent() {} /////////////////////////////////////////////////////////////////////////// -// 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) {