From: tho Date: Mon, 14 Feb 2011 08:50:48 +0000 (+0000) Subject: added unit test to demonstrate Jack <->Multiconnector problem X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=8fd21b2b2da6c78c27ca80699cb875ed537b77c1;p=senf.git added unit test to demonstrate Jack <->Multiconnector problem git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1769 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/senf/PPI/Connectors.cc b/senf/PPI/Connectors.cc index 1e3fb63..9b0232d 100644 --- a/senf/PPI/Connectors.cc +++ b/senf/PPI/Connectors.cc @@ -66,6 +66,7 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target) SENF_ASSERT( ! target.peer_, "senf::ppi::connector::Connector::connect(): (target) " "duplicate connection" ); + if (! (packetTypeID() == typeid(void) || target.packetTypeID() == typeid(void) || packetTypeID() == target.packetTypeID()) ) diff --git a/senf/PPI/Jack.cc b/senf/PPI/Jack.cc new file mode 100644 index 0000000..114f24e --- /dev/null +++ b/senf/PPI/Jack.cc @@ -0,0 +1,86 @@ +// $Id$ +// +// Copyright (C) 2009 +// 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 +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief Jack non-inline non-template implementation */ + +//#include "Jack.ih" + +// Custom includes +#include "Setup.hh" + +#define prefix_ +//-///////////////////////////////////////////////////////////////////////////////////////////////// + +prefix_ void senf::ppi::connector::GenericActiveInputJack::reset(GenericActiveInput & input) +{ + if (input_->connected()) { + GenericPassiveOutput & peer (input_->peer()); + input_->disconnect(); + connect(peer, input); + } + input_ = & input; +} + +prefix_ void senf::ppi::connector::GenericActiveOutputJack::reset(GenericActiveOutput & output) +{ + if (output_->connected()) { + GenericPassiveInput & peer (output_->peer()); + output_->disconnect(); + connect(output, peer); + } + output_ = & output; +} + +prefix_ void senf::ppi::connector::GenericPassiveInputJack::reset(GenericPassiveInput & input) +{ + if (input_->connected()) { + GenericActiveOutput & peer (input_->peer()); + input_->disconnect(); + connect(peer, input); + } + input_ = & input; +} + +prefix_ void senf::ppi::connector::GenericPassiveOutputJack::reset(GenericPassiveOutput & output) +{ + if (output_->connected()) { + GenericActiveInput & peer (output_->peer()); + output_->disconnect(); + connect(output, peer); + } + output_ = & output; +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: diff --git a/senf/PPI/Jack.cci b/senf/PPI/Jack.cci index 7f5425c..8ebb7d2 100644 --- a/senf/PPI/Jack.cci +++ b/senf/PPI/Jack.cci @@ -42,16 +42,6 @@ senf::ppi::connector::GenericActiveInputJack::connector() return *input_; } -prefix_ void senf::ppi::connector::GenericActiveInputJack::reset(GenericActiveInput & input) -{ - if (input_->connected()) { - GenericPassiveOutput & peer (input_->peer()); - input_->disconnect(); - connect(peer, input); - } - input_ = & input; -} - prefix_ senf::ppi::connector::GenericActiveOutputJack:: GenericActiveOutputJack(GenericActiveOutput & output) : output_ (&output) @@ -63,16 +53,6 @@ senf::ppi::connector::GenericActiveOutputJack::connector() return *output_; } -prefix_ void senf::ppi::connector::GenericActiveOutputJack::reset(GenericActiveOutput & output) -{ - if (output_->connected()) { - GenericPassiveInput & peer (output_->peer()); - output_->disconnect(); - connect(output, peer); - } - output_ = & output; -} - prefix_ senf::ppi::connector::GenericPassiveInputJack:: GenericPassiveInputJack(GenericPassiveInput & input) : input_ (&input) @@ -84,16 +64,6 @@ senf::ppi::connector::GenericPassiveInputJack::connector() return *input_; } -prefix_ void senf::ppi::connector::GenericPassiveInputJack::reset(GenericPassiveInput & input) -{ - if (input_->connected()) { - GenericActiveOutput & peer (input_->peer()); - input_->disconnect(); - connect(peer, input); - } - input_ = & input; -} - prefix_ senf::ppi::connector::GenericPassiveOutputJack:: GenericPassiveOutputJack(GenericPassiveOutput & output) : output_ (&output) @@ -105,17 +75,6 @@ senf::ppi::connector::GenericPassiveOutputJack::connector() return *output_; } -prefix_ void -senf::ppi::connector::GenericPassiveOutputJack::reset(GenericPassiveOutput & output) -{ - if (output_->connected()) { - GenericActiveInput & peer (output_->peer()); - output_->disconnect(); - connect(output, peer); - } - output_ = & output; -} - prefix_ senf::ppi::connector::ActiveInputJack:: ActiveInputJack(GenericActiveInput & input) : GenericActiveInputJack (input) diff --git a/senf/PPI/Joins.test.cc b/senf/PPI/Joins.test.cc index 12cc835..6718448 100644 --- a/senf/PPI/Joins.test.cc +++ b/senf/PPI/Joins.test.cc @@ -143,6 +143,45 @@ SENF_AUTO_UNIT_TEST(priorityJoin) BOOST_CHECK( ! sink ); } +namespace { + struct ActiveJackSource + { + senf::ppi::connector::ActiveOutputJack<> output; + + debug::ActiveSource source1; + debug::ActiveSource source2; + + ActiveJackSource() + : output (source1.output) {} + + void flip() { + output.reset( source2.output); + } + }; +} + +//SENF_AUTO_UNIT_TEST(jack_passiveJoin) +//{ +// ActiveJackSource jackSource; +// PassiveJoin join; +// debug::PassiveSink sink; +// +// ppi::connect(jackSource, join); +// ppi::connect(join, sink); +// ppi::init(); +// +// senf::Packet p1 (senf::DataPacket::create()); +// senf::Packet p2 (senf::DataPacket::create()); +// +// jackSource.source1.submit( p1); +// BOOST_CHECK_EQUAL( sink.pop_front(), p1); +// +// jackSource.flip(); +// +// jackSource.source2.submit( p2); +// BOOST_CHECK_EQUAL( sink.pop_front(), p2); +//} + //-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_