Fix SCons 1.2.0 build failure
[senf.git] / PPI / MultiConnectorMixin.mpp
index be0c920..aeb5dfd 100644 (file)
@@ -102,6 +102,9 @@ connect(Source & source, Target & target mpp_FnParamsKomma());
 // ////////////////////////////////////////////////////////////////////////
 // Implementation
 
+////////////////////////////////////////
+// Map container
+
 template <class Self_, class ConnectorType_, class KeyType_, class ContainerType_>
 mpp_TplParams()
 prefix_ ConnectorType_ &
@@ -113,6 +116,9 @@ newConnector(mpp_FnParams())
     return * connectors_.insert(key, conn).first->second;
 }
 
+////////////////////////////////////////
+// Vector container
+
 template <class Self_, class ConnectorType_, class ContainerType_>
 mpp_TplParams()
 prefix_ ConnectorType_ &
@@ -126,13 +132,33 @@ newConnector(mpp_FnParams())
     return conn;
 }
 
+////////////////////////////////////////
+// User managed container
+
+template <class Self_, class ConnectorType_>
+mpp_TplParams()
+prefix_ ConnectorType_ &
+senf::ppi::module::MultiConnectorMixin<Self_,ConnectorType_,void,void>::
+newConnector(mpp_FnParams())
+{
+    std::auto_ptr<ConnectorType_> cp (new ConnectorType_);
+    ConnectorType_ & cref (*cp);
+    static_cast<Self_*>(this)->connectorSetup(cp mpp_CallParamsKomma());
+    return cref;
+}
+
+////////////////////////////////////////
+// senf::ppi::connect
+
 template <class Source, class Target mpp_TplParamsKomma()>
 typename boost::enable_if<
     boost::is_base_of<senf::ppi::connector::OutputConnector, typename Source::ConnectorType>,
     typename Source::ConnectorType & >::type
 senf::ppi::connect(Source & source, Target & target mpp_FnParamsKomma())
 {
-    connect(source.newConnector(mpp_CallParams()), target);
+    typename Source::ConnectorType & c (source.newConnector(mpp_CallParams()));
+    connect(c, target);
+    return c;
 }
 
 template <class Source, class Target mpp_TplParamsKomma()>
@@ -141,7 +167,9 @@ typename boost::enable_if<
     typename Target::ConnectorType & >::type
 senf::ppi::connect(Source & source, Target & target mpp_FnParamsKomma())
 {
-    connect(source, target.newConnector(mpp_CallParams()));
+    typename Target::ConnectorType & c (target.newConnector(mpp_CallParams()));
+    connect(source, c);
+    return c;
 }
 
 // ////////////////////////////////////////////////////////////////////////