X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FMultiConnectorMixin.mpp;h=8000c671938f13c373e44ce039688019ef3d18b6;hb=fde4399789762f8257f7361761bd1a798068e717;hp=6beca75a02450c7797da0f177f714c87e644a6b7;hpb=cbda4fa567676eabc379cb06b7d79717f59e1a87;p=senf.git diff --git a/senf/PPI/MultiConnectorMixin.mpp b/senf/PPI/MultiConnectorMixin.mpp index 6beca75..8000c67 100644 --- a/senf/PPI/MultiConnectorMixin.mpp +++ b/senf/PPI/MultiConnectorMixin.mpp @@ -38,7 +38,6 @@ #include #include #include -#include // ///////////////////////////mpp.p//////////////////////////////////////// #elif BOOST_PP_IS_ITERATING // //////////////////////////////////////////// @@ -92,15 +91,6 @@ mpp_TplParams() ConnectorType_ & newConnector( mpp_FnParams() ); // //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==9 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// senf::ppi::module::MultiConnectorMixin member declaration 1..2*MAX_ARGS - -template -static boost::tuple -connect_(Source & source, Target & target mpp_FnParamsKomma()); - -// //////////////////////////////////////////////////////////////////////// #elif BOOST_PP_ITERATION_FLAGS()==2 // //////////////////////////////////// // //////////////////////////////////////////////////////////////////////// // senf::ppi namespace member declaration 1..MAX_ARGS @@ -114,7 +104,7 @@ typename boost::enable_if< senf::ppi::module::detail::IsMulticonnectorSource, boost::mpl::not_< senf::ppi::module::detail::IsMulticonnectorTarget > >, typename Source::ConnectorType & >::type -connect(Source & source, Target & target mpp_FnParamsKomma()); +connect(Source & source mpp_FnParamsKomma(), Target & target); template typename boost::enable_if< @@ -132,32 +122,17 @@ connect(Source & source, Target & target mpp_FnParamsKomma()); #include BOOST_PP_ITERATE() // //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==6 // //////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==4 // //////////////////////////////////// // //////////////////////////////////////////////////////////////////////// -// senf::ppi namespace member declaration 1..2*MAX_ARGS +// senf::ppi namespace member declaration 1..MAX_ARGS x 1..MAX_ARGS -template +template typename boost::enable_if< boost::mpl::and_< boost::is_base_of, boost::is_base_of >, boost::tuple >::type -connect(Source & source, Target & target mpp_FnParamsKomma()); - -// //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==4 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// senf::ppi namespace member declaration 1..MAX_ARGS x 1..MAX_ARGS - -namespace detail { - -template -typename boost::enable_if_c< - senf::function_arity::value == BOOST_PP_ITERATION()+1, - boost::tuple >::type -connect_(Fn, Source & source, Target & target mpp_FnParamsKomma() mpp_FnParamsKomma2()); - -} +connect(Source & source mpp_FnParamsKomma(), Target & target mpp_FnParamsKomma2()); // //////////////////////////////////////////////////////////////////////// #elif BOOST_PP_ITERATION_FLAGS()==8 // //////////////////////////////////// @@ -169,15 +144,6 @@ static typename Module::ConnectorType & newConnector(Module & module mpp_FnParamsKomma()); // //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==10 // /////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// senf::ppi::module::detail::MultiConnectorMixinAccess member declaration 1..2*MAX_ARGS - -template -static boost::tuple -connect(Source & source, Target & target mpp_FnParamsKomma()); - -// //////////////////////////////////////////////////////////////////////// #elif BOOST_PP_ITERATION_FLAGS()==3 // //////////////////////////////////// // //////////////////////////////////////////////////////////////////////// // Implementation 1..MAX_ARGS @@ -191,7 +157,7 @@ prefix_ ConnectorType_ & senf::ppi::module::MultiConnectorMixin:: newConnector(mpp_FnParams()) { - std::auto_ptr conn (new ConnectorType_); + std::auto_ptr conn (new detail::MultiConnectorWrapper); KeyType_ key (static_cast(this)->connectorSetup(*conn mpp_CallParamsKomma())); return * connectors_.insert(key, conn).first->second; } @@ -205,10 +171,10 @@ prefix_ ConnectorType_ & senf::ppi::module::MultiConnectorMixin:: newConnector(mpp_FnParams()) { - connectors_.push_back(new ConnectorType_); + connectors_.push_back(new detail::MultiConnectorWrapper); ConnectorType_ & conn (connectors_.back()); try { static_cast(this)->connectorSetup(conn mpp_CallParamsKomma()); } - catch (...) { connectors_.pop_back(); throw; } + catch (...) { disconnected(conn); throw; } return conn; } @@ -221,7 +187,7 @@ prefix_ ConnectorType_ & senf::ppi::module::MultiConnectorMixin:: newConnector(mpp_FnParams()) { - std::auto_ptr cp (new ConnectorType_); + std::auto_ptr cp (new detail::MultiConnectorWrapper); ConnectorType_ & cref (*cp); static_cast(this)->connectorSetup(cp mpp_CallParamsKomma()); return cref; @@ -236,7 +202,7 @@ typename boost::enable_if< senf::ppi::module::detail::IsMulticonnectorSource, boost::mpl::not_< senf::ppi::module::detail::IsMulticonnectorTarget > >, typename Source::ConnectorType & >::type -senf::ppi::connect(Source & source, Target & target mpp_FnParamsKomma()) +senf::ppi::connect(Source & source mpp_FnParamsKomma(), Target & target) { typename Source::ConnectorType & c ( module::detail::MultiConnectorMixinAccess::newConnector(source mpp_CallParamsKomma())); @@ -276,87 +242,18 @@ senf::ppi::module::detail::MultiConnectorMixinAccess::newConnector( 5 )) #include BOOST_PP_ITERATE() +//////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==5 // //////////////////////////////////// // //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==7 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// Implementation 1..2*MAX_ARGS - -//////////////////////////////////////// -// Map container - -template -template -boost::tuple -senf::ppi::module::MultiConnectorMixin:: -connect_(Source & source, Target & target mpp_FnParamsKomma()) -{ - return senf::ppi::detail::connect_( - & Self_::connectorSetup, source, target mpp_CallParamsKomma()); -} - -//////////////////////////////////////// -// Vector container - -template -template -boost::tuple -senf::ppi::module::MultiConnectorMixin:: -connect_(Source & source, Target & target mpp_FnParamsKomma()) -{ - return senf::ppi::detail::connect_( - & Self_::connectorSetup, source, target mpp_CallParamsKomma()); -} - -//////////////////////////////////////// -// User container - -template -template -boost::tuple -senf::ppi::module::MultiConnectorMixin:: -connect_(Source & source, Target & target mpp_FnParamsKomma()) -{ - return senf::ppi::detail::connect_( - & Self_::connectorSetup, source, target mpp_CallParamsKomma()); -} - -//////////////////////////////////////// -// senf::ppi::connect +// Implementation 1..MAX_ARGS x 1..MAX_ARGS -template +template typename boost::enable_if< boost::mpl::and_< boost::is_base_of, boost::is_base_of >, boost::tuple >::type -senf::ppi::connect(Source & source, Target & target mpp_FnParamsKomma()) -{ - return module::detail::MultiConnectorMixinAccess::connect( - source, target mpp_CallParamsKomma()); -} - -//////////////////////////////////////// -// senf::ppi::module::detail::MultiConnectorMixinAccess members - -template -boost::tuple -senf::ppi::module::detail::MultiConnectorMixinAccess::connect( - Source & source, Target & target mpp_FnParamsKomma()) -{ - return Source::connect_(source, target mpp_CallParamsKomma()); -} - -//////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==5 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// Implementation 1..MAX_ARGS x 1..MAX_ARGS - -template -typename boost::enable_if_c< - senf::function_arity::value == BOOST_PP_ITERATION()+1, - boost::tuple >::type -senf::ppi::detail::connect_(Fn, Source & source, Target & target - mpp_FnParamsKomma() mpp_FnParamsKomma2()) +senf::ppi::connect(Source & source mpp_FnParamsKomma(), Target & target mpp_FnParamsKomma2()) { typename Source::ConnectorType & s ( module::detail::MultiConnectorMixinAccess::newConnector(source mpp_CallParamsKomma()));