fixes for g++ 4.5 (some members returned "the constructor, not the type")
[senf.git] / senf / PPI / Route.cti
index c72ad31..9708c22 100644 (file)
@@ -28,9 +28,9 @@
 // Custom includes
 
 #define prefix_ inline
-///////////////////////////////cti.p///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::Route<Source,Target>
 
 template <class Source, class Target>
@@ -39,10 +39,10 @@ prefix_ senf::ppi::Route<Source,Target>::Route(module::Module & module, Source &
     : Base(module,source,target)
 {}
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::ForwardingRoute
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 template <class T>
@@ -52,6 +52,12 @@ prefix_ void senf::ppi::ForwardingRoute::registerRoute(T & ob)
 }
 
 template <class T>
+prefix_ void senf::ppi::ForwardingRoute::unregisterRoute(T & ob)
+{
+    ob.unregisterRoute(*this);
+}
+
+template <class T>
 prefix_ void senf::ppi::ForwardingRoute::notifyThrottle(T & ob)
 {
     ob.notifyThrottle();
@@ -63,7 +69,7 @@ prefix_ void senf::ppi::ForwardingRoute::notifyUnthrottle(T & ob)
     ob.notifyUnthrottle();
 }
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>
 
 template <class Source, class Target, class Base>
@@ -80,7 +86,7 @@ prefix_ Target & senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>:
     return *target_;
 }
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 template <class Source, class Target, class Base>
@@ -89,10 +95,61 @@ BaseRouteImplementation(module::Module & module, Source & source, Target & targe
     : Base(module), source_(&source), target_(&target)
 {}
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// private members
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+v_hasConnector(connector::Connector const & conn)
+    const
+{
+    return isSame(conn, source()) || isSame(conn, target());
+}
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+v_hasEvent(EventDescriptor const & event)
+    const
+{
+    return isSame(event, source()) || isSame(event, target());
+}
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+isSame(connector::Connector const & conn, connector::Connector const & other)
+    const
+{
+    return &conn == &other;
+}
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+isSame(connector::Connector const & conn, EventDescriptor const & other)
+    const
+{
+    return false;
+}
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+isSame(EventDescriptor const & event, connector::Connector const & other)
+    const
+{
+    return false;
+}
+
+template <class Source, class Target, class Base>
+prefix_ bool senf::ppi::detail::BaseRouteImplementation<Source,Target,Base>::
+isSame(EventDescriptor const & event, EventDescriptor const & other)
+    const
+{
+    return &event == &other;
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::detail::ForwardingRouteImplementation<Source,Target>
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 template <class Source, class Target>
@@ -105,7 +162,16 @@ ForwardingRouteImplementation(module::Module & module, Source & source, Target &
     registerRoute(target);
 }
 
-////////////////////////////////////////
+template <class Source, class Target>
+prefix_
+senf::ppi::detail::ForwardingRouteImplementation<Source,Target>::
+~ForwardingRouteImplementation()
+{
+    unregisterRoute(this->source());
+    unregisterRoute(this->target());
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // private members
 
 template <class Source, class Target>
@@ -154,10 +220,10 @@ throttled(T & ob, boost::mpl::bool_<false> const &)
     return false;
 }
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::detail::RouteImplementation2<Source,Target>
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 template <class Source, class Target>
@@ -166,10 +232,10 @@ RouteImplementation2(module::Module & module, Source & source, Target & target)
     : Base(module,source,target)
 {}
 
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // senf::ppi::detail::RouteImplementation<Source,Target>
 
-////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 // protected members
 
 template <class Source, class Target>
@@ -178,7 +244,7 @@ RouteImplementation(module::Module & module, Source & source, Target & target)
     : Base(module,source,target)
 {}
 
-///////////////////////////////cti.e///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #undef prefix_
 
 \f