X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FMultiConnectorMixin.cti;h=7be0689537996b0055ff0f707a8290872dfe1290;hb=93d9568d448749dc187e7622b733a4a3caa319df;hp=3df16d8964649aab870e718b190fade1e46cfdf5;hpb=0584aff454ea331f482f830c3ee16d4fdafb3ffb;p=senf.git diff --git a/senf/PPI/MultiConnectorMixin.cti b/senf/PPI/MultiConnectorMixin.cti index 3df16d8..7be0689 100644 --- a/senf/PPI/MultiConnectorMixin.cti +++ b/senf/PPI/MultiConnectorMixin.cti @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -23,12 +23,25 @@ /** \file \brief MultiConnectorMixin inline template implementation */ -//#include "MultiConnectorMixin.ih" +#include "MultiConnectorMixin.ih" // Custom includes #define prefix_ inline -///////////////////////////////cti.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// + +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::detail::MultiConnectorWrapper + +template +prefix_ void senf::ppi::module::detail::MultiConnectorWrapper::v_disconnected() +{ + Connector::v_disconnected(); + static_cast(this->module()).disconnected(*this); +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::MultiConnectorMixin template prefix_ ContainerType_ & @@ -46,6 +59,15 @@ connectors() return connectors_; } +template +prefix_ void +senf::ppi::module::MultiConnectorMixin:: +connectorDestroy(ConnectorType const &) +{} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::MultiConnectorMixin + template prefix_ ContainerType_ & senf::ppi::module::MultiConnectorMixin::connectors() @@ -53,54 +75,34 @@ senf::ppi::module::MultiConnectorMixin return connectors_; } -#ifdef DOXYGEN - -// Only for exposition -// Other implementations with 0..SENF_MULTI_CONNECTOR_MAX_ARGS arguments accordingly - -template -template -prefix_ ConnectorType_ & -senf::ppi::module::MultiConnectorMixin:: -newConnector(A1 const & a1) +template +prefix_ ContainerType_ const & +senf::ppi::module::MultiConnectorMixin::connectors() + const { - std::auto_ptr conn (new ConnectorType_); - KeyType_ key (static_cast(this)->connectorSetup(*conn, a1)); - return * connectors_.insert(key, conn).first->second; + return connectors_; } template -template -prefix_ ConnectorType_ & +prefix_ void senf::ppi::module::MultiConnectorMixin:: -newConnector(A1 const & a1) -{ - connectors_.push_back(new ConnectorType_); - ConnectorType_ & conn (connectors_.back()); - try { static_cast(this)->connectorSetup(conn , a1); } - catch (...) { connectors_.pop_back(); throw; } - return conn; -} +connectorDestroy(ConnectorType const &) +{} -template -typename boost::enable_if< - boost::is_base_of, - typename Source::ConnectorType & >::type -senf::ppi::connect(Source & source, Target & target , A1 const & a1) -{ - connect(source.newConnector(a1), target); -} +//-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ppi::module::MultiConnectorMixin -template -typename boost::enable_if< - boost::is_base_of, - typename Target::ConnectorType & >::type -senf::ppi::connect(Source & source, Target & target , A1 const & a1) +template +prefix_ void +senf::ppi::module::MultiConnectorMixin:: +disconnected(ConnectorType_ const & c) { - connect(source, target.newConnector(a1)); + static_cast(this)->connectorDestroy(&c); } -#else +//-///////////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef DOXYGEN // Include 'Implementation' from MultiConnectorMixin.mpp #define BOOST_PP_ITERATION_PARAMS_1 (4, ( \ @@ -112,7 +114,7 @@ senf::ppi::connect(Source & source, Target & target , A1 const & a1) #endif -///////////////////////////////cti.e/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_