X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FMultiConnectorMixin.mpp;h=afbfbd851dbcbba410e26dc2a8cd6220f1ececd9;hb=7661548b20e6c7627f54bff87e0758396fd523ef;hp=6beca75a02450c7797da0f177f714c87e644a6b7;hpb=cbda4fa567676eabc379cb06b7d79717f59e1a87;p=senf.git diff --git a/senf/PPI/MultiConnectorMixin.mpp b/senf/PPI/MultiConnectorMixin.mpp index 6beca75..afbfbd8 100644 --- a/senf/PPI/MultiConnectorMixin.mpp +++ b/senf/PPI/MultiConnectorMixin.mpp @@ -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 @@ -29,20 +29,19 @@ // Custom includes #include #include -#include +#include #include #include #include -#include +#include #include #include #include #include -#include -// ///////////////////////////mpp.p//////////////////////////////////////// -#elif BOOST_PP_IS_ITERATING // //////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-///////////////////////////mpp.p//////////////////////////////////////// +#elif BOOST_PP_IS_ITERATING //-//////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // Local Macros // => template @@ -83,26 +82,17 @@ #define mpp_CallParamsKomma2() \ BOOST_PP_ENUM_TRAILING_PARAMS(BOOST_PP_FRAME_ITERATION(1), b) -// //////////////////////////////////////////////////////////////////////// -#if BOOST_PP_ITERATION_FLAGS()==1 // ////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#if BOOST_PP_ITERATION_FLAGS()==1 //-////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // senf::ppi::module::MultiConnectorMixin member declaration 1..MAX_ARGS 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 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==2 //-//////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // senf::ppi namespace member declaration 1..MAX_ARGS // Here the reference to Source::ConnectorType / Target::ConnectorType @@ -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< @@ -131,58 +121,34 @@ connect(Source & source, Target & target mpp_FnParamsKomma()); 4 )) #include BOOST_PP_ITERATE() -// //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==6 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// -// senf::ppi namespace member declaration 1..2*MAX_ARGS +//-//////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==4 //-//////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +// 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()); +connect(Source & source mpp_FnParamsKomma(), Target & target mpp_FnParamsKomma2()); -// //////////////////////////////////////////////////////////////////////// -#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()); - -} - -// //////////////////////////////////////////////////////////////////////// -#elif BOOST_PP_ITERATION_FLAGS()==8 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==8 //-//////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // senf::ppi::module::detail::MultiConnectorMixinAccess member declaration 1..MAX_ARGS template -static typename Module::ConnectorType & +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 // //////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==3 //-//////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // Implementation 1..MAX_ARGS -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // Map container template @@ -191,12 +157,12 @@ 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; } -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // Vector container template @@ -205,14 +171,14 @@ 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; } -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // User managed container template @@ -221,13 +187,13 @@ 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; } -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ppi::connect template @@ -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())); @@ -258,11 +224,11 @@ senf::ppi::connect(Source & source, Target & target mpp_FnParamsKomma()) return c; } -//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ppi::module::detail::MultiConnectorMixinAccess members template -typename Module::ConnectorType & +typename Module::ConnectorType & senf::ppi::module::detail::MultiConnectorMixinAccess::newConnector( Module & module mpp_FnParamsKomma()) { @@ -276,87 +242,18 @@ senf::ppi::module::detail::MultiConnectorMixinAccess::newConnector( 5 )) #include BOOST_PP_ITERATE() -// //////////////////////////////////////////////////////////////////////// -#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 +//-///////////////////////////////////////////////////////////////////////////////////////////////// +#elif BOOST_PP_ITERATION_FLAGS()==5 //-//////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +// 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())); @@ -366,9 +263,9 @@ senf::ppi::detail::connect_(Fn, Source & source, Target & target return boost::tie(s,t); } -// //////////////////////////////////////////////////////////////////////// -#endif // ///////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#endif //-///////////////////////////////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// // Undefine local Macros #undef mpp_CallParamsKomma2 @@ -383,15 +280,15 @@ senf::ppi::detail::connect_(Fn, Source & source, Target & target #undef mpp_TplParamsKomma #undef mpp_TplParams_ #undef mpp_TplParams - -// //////////////////////////////////////////////////////////////////////// + +//-//////////////////////////////////////////////////////////////////////// /* (save-excursion (re-search-backward "^// Undefine local Macros") (forward-line 1) (delete-region (point) (progn (search-forward - "// ////") (forward-line -1) (point))) (insert "\n") (let ((b (point)) - (e (progn (insert (save-excursion (re-search-backward + "//-////") (forward-line -1) (point))) (insert "\n") (let ((b (point)) + (e (progn (insert (save-excursion (re-search-backward "^// Local Macros") (search-forward "#define") (beginning-of-line) - (buffer-substring (point) (progn (search-forward "// ////") + (buffer-substring (point) (progn (search-forward "//-////") (search-backward "#define") (forward-line 1) (point))))) (point)))) (reverse-region b e) (shell-command-on-region b e "grep -F '#define'" nil t) (goto-char b) (while (looking-at "#define") (delete-char 7) (insert @@ -399,9 +296,9 @@ senf::ppi::detail::connect_(Fn, Source & source, Target & target (delete-region (1- (point)) (progn (end-of-line) (point))) (forward-line 1)))) */ -// //////////////////////////////////////////////////////////////////////// -#endif // ///////////////////////////////////////////////////////////////// -// ///////////////////////////mpp.e//////////////////////////////////////// +//-//////////////////////////////////////////////////////////////////////// +#endif //-///////////////////////////////////////////////////////////////// +//-///////////////////////////mpp.e//////////////////////////////////////// // Local Variables: