PPI: Implement a more sane multi-connector connect API
g0dil [Tue, 8 Sep 2009 13:02:36 +0000 (13:02 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1399 270642c3-0616-0410-b53a-bc976706d245

senf/PPI/AnnotationRouter.test.cc
senf/PPI/MultiConnectorMixin.cti
senf/PPI/MultiConnectorMixin.hh
senf/PPI/MultiConnectorMixin.ih
senf/PPI/MultiConnectorMixin.mpp
senf/PPI/MultiConnectorMixin.test.cc

index 670d929..e832403 100644 (file)
@@ -60,10 +60,10 @@ BOOST_AUTO_UNIT_TEST(annotationRouter)
     senf::ppi::module::AnnotationRouter<IntAnnotation> router;
     
     senf::ppi::connect(source, router);
-    senf::ppi::connect(router, sink1, 1);
-    senf::ppi::connect(router, sink2, 2);
+    senf::ppi::connect(router, 1, sink1);
+    senf::ppi::connect(router, 2, sink2);
     
-    BOOST_CHECK_THROW( senf::ppi::connect(router, sink2, 2), 
+    BOOST_CHECK_THROW( senf::ppi::connect(router, 2, sink2), 
             senf::ppi::module::AnnotationRouter<IntAnnotation>::DuplicateKeyException);
 
     senf::ppi::init();
index 1a79cf7..3df16d8 100644 (file)
@@ -110,14 +110,6 @@ senf::ppi::connect(Source & source, Target & target , A1 const & a1)
             3 ))
 #include BOOST_PP_ITERATE()
 
-// Include 'senf::ppi::detail implementation' from MultiConnectorMixin.mpp
-#define BOOST_PP_ITERATION_PARAMS_1 (4, ( \
-            0, \
-            2*SENF_MULTI_CONNECTOR_MAX_ARGS,                           \
-            SENF_ABSOLUTE_INCLUDE_PATH(PPI/MultiConnectorMixin.mpp), \
-            7 ))
-#include BOOST_PP_ITERATE()
-
 #endif
 
 ///////////////////////////////cti.e///////////////////////////////////////
index 996722c..f0d3102 100644 (file)
@@ -88,13 +88,6 @@ namespace ppi {
             2 ))
 #   include BOOST_PP_ITERATE()
 
-#   define BOOST_PP_ITERATION_PARAMS_1 (4, ( \
-            0, \
-            2*SENF_MULTI_CONNECTOR_MAX_ARGS, \
-            SENF_ABSOLUTE_INCLUDE_PATH(PPI/MultiConnectorMixin.mpp), \
-            6 ))
-#   include BOOST_PP_ITERATE()
-
 #endif
 
 namespace module {
index 72121b2..5207def 100644 (file)
@@ -43,13 +43,6 @@ namespace detail {
             SENF_ABSOLUTE_INCLUDE_PATH(PPI/MultiConnectorMixin.mpp),    \
             8 ))
 #       include BOOST_PP_ITERATE()
-
-#       define BOOST_PP_ITERATION_PARAMS_1 (4, ( \
-            0, \
-            2*SENF_MULTI_CONNECTOR_MAX_ARGS,                            \
-            SENF_ABSOLUTE_INCLUDE_PATH(PPI/MultiConnectorMixin.mpp),    \
-            10 ))
-#       include BOOST_PP_ITERATE()
     };
 
     template <class KeyType, class ConnectorType>
index 6beca75..78a3f8f 100644 (file)
@@ -114,7 +114,7 @@ typename boost::enable_if<
         senf::ppi::module::detail::IsMulticonnectorSource<Source>,
         boost::mpl::not_< senf::ppi::module::detail::IsMulticonnectorTarget<Target> > >,
     typename Source::ConnectorType & >::type
-connect(Source & source, Target & target mpp_FnParamsKomma());
+connect(Source & source mpp_FnParamsKomma(), Target & target);
 
 template <class Source, class Target mpp_TplParamsKomma()>
 typename boost::enable_if<
@@ -132,32 +132,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 <class Source, class Target mpp_TplParamsKomma()>
+template <class Source, class Target mpp_TplParamsKomma() mpp_TplParamsKomma2()>
 typename boost::enable_if<
     boost::mpl::and_<
         boost::is_base_of<connector::OutputConnector, typename Source::ConnectorType>,
         boost::is_base_of<connector::InputConnector, typename Target::ConnectorType> >,
     boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &> >::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 <class Fn, class Source, class Target mpp_TplParamsKomma() mpp_TplParamsKomma2()>
-typename boost::enable_if_c<
-    senf::function_arity<Fn>::value == BOOST_PP_ITERATION()+1,
-    boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &> >::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 +154,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 <class Source, class Target mpp_TplParamsKomma()>
-static boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &>
-connect(Source & source, Target & target mpp_FnParamsKomma());
-
-// ////////////////////////////////////////////////////////////////////////
 #elif BOOST_PP_ITERATION_FLAGS()==3 // ////////////////////////////////////
 // ////////////////////////////////////////////////////////////////////////
 // Implementation 1..MAX_ARGS
@@ -236,7 +212,7 @@ typename boost::enable_if<
         senf::ppi::module::detail::IsMulticonnectorSource<Source>,
         boost::mpl::not_< senf::ppi::module::detail::IsMulticonnectorTarget<Target> > >,
     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 +252,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 <class Self_, class ConnectorType_, class KeyType_, class ContainerType_>
-template <class Source, class Target mpp_TplParamsKomma()>
-boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &>
-senf::ppi::module::MultiConnectorMixin<Self_,ConnectorType_,KeyType_,ContainerType_>::
-connect_(Source & source, Target & target mpp_FnParamsKomma())
-{
-    return senf::ppi::detail::connect_(
-        & Self_::connectorSetup, source, target mpp_CallParamsKomma());
-}
-
-////////////////////////////////////////
-// Vector container
-
-template <class Self_, class ConnectorType_, class ContainerType_>
-template <class Source, class Target mpp_TplParamsKomma()>
-boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &>
-senf::ppi::module::MultiConnectorMixin<Self_,ConnectorType_,void,ContainerType_>::
-connect_(Source & source, Target & target mpp_FnParamsKomma())
-{
-    return senf::ppi::detail::connect_(
-        & Self_::connectorSetup, source, target mpp_CallParamsKomma());
-}
-
-////////////////////////////////////////
-// User container
-
-template <class Self_, class ConnectorType_>
-template <class Source, class Target mpp_TplParamsKomma()>
-boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &>
-senf::ppi::module::MultiConnectorMixin<Self_,ConnectorType_,void,void>::
-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 <class Source, class Target mpp_TplParamsKomma()>
+template <class Source, class Target mpp_TplParamsKomma() mpp_TplParamsKomma2()>
 typename boost::enable_if<
     boost::mpl::and_<
         boost::is_base_of<senf::ppi::connector::OutputConnector, typename Source::ConnectorType>,
         boost::is_base_of<senf::ppi::connector::InputConnector, typename Target::ConnectorType> >,
     boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &> >::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 <class Source, class Target mpp_TplParamsKomma()>
-boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &>
-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 <class Fn, class Source, class Target mpp_TplParamsKomma() mpp_TplParamsKomma2()>
-typename boost::enable_if_c<
-    senf::function_arity<Fn>::value == BOOST_PP_ITERATION()+1,
-    boost::tuple<typename Source::ConnectorType &, typename Target::ConnectorType &> >::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()));
index 158be13..84fcbaf 100644 (file)
@@ -123,7 +123,7 @@ BOOST_AUTO_UNIT_TEST(multiConnectorMixin_multipleModules)
     
     ppi::connect(source, join1);
     ppi::connect(join1, router);
-    ppi::connect(router, join2, 1);
+    ppi::connect(router, 1, join2);
     ppi::connect(join2, module);
     ppi::connect(module, sink);