From 354cc867780ab8f082d4c6f4410ddd87ede5bc3e Mon Sep 17 00:00:00 2001
From: g0dil <g0dil@wiback.org>
Date: Wed, 12 Mar 2008 14:01:24 +0000
Subject: [PATCH] PPI: Move generic packet typeid check into connector
 base-class

---
 PPI/Connectors.cc       |  5 +++++
 PPI/Connectors.hh       | 21 +++++++++------------
 PPI/Route.ih            |  4 ++++
 Packets/ParseHelpers.hh |  2 +-
 4 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/PPI/Connectors.cc b/PPI/Connectors.cc
index 5c4ceff4e..e11e5e233 100644
--- a/PPI/Connectors.cc
+++ b/PPI/Connectors.cc
@@ -53,6 +53,11 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target)
     target.peer_ = this;
 }
 
+prefix_ std::type_info const & senf::ppi::connector::Connector::packetTypeID()
+{
+    return typeid(void);
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::ppi::connector::PassiveConnector
 
diff --git a/PPI/Connectors.hh b/PPI/Connectors.hh
index be55849db..60b1f719d 100644
--- a/PPI/Connectors.hh
+++ b/PPI/Connectors.hh
@@ -123,7 +123,7 @@ namespace connector {
         void connect(Connector & target);
 
     private:
-        virtual std::type_info const & packetTypeID() = 0;
+        virtual std::type_info const & packetTypeID();
 
         void setModule(module::Module & module);
 
@@ -456,27 +456,24 @@ namespace connector {
 
 #   define TypedConnector_Input read
 #   define TypedConnector_Output write
-#   define TypedConnector(pType, dir)                                                              \
+#   define TypedConnector(pType, dir)                                                             \
         template <class PacketType>                                                               \
-        class pType ## dir                                                                         \
-            : public Generic ## pType ## dir,                                                      \
-              private detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType>         \
+        class pType ## dir                                                                        \
+            : public Generic ## pType ## dir,                                                     \
+              private detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType>        \
         {                                                                                         \
-            typedef detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType> mixin;    \
+            typedef detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType> mixin;   \
         public:                                                                                   \
             using mixin::operator();                                                              \
             using mixin::TypedConnector_ ## dir ;                                                 \
         private:                                                                                  \
             virtual std::type_info const & packetTypeID()                                         \
                 { return typeid(typename PacketType::type); }                                     \
-            friend class detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType>;     \
+            friend class detail::Typed ## dir ## Mixin<pType ## dir <PacketType>, PacketType>;    \
         };                                                                                        \
         template <>                                                                               \
-        class pType ## dir <Packet> : public Generic ## pType ## dir                                \
-        {                                                                                         \
-        private:                                                                                  \
-            virtual std::type_info const & packetTypeID() { return typeid(void); }                \
-        }
+        class pType ## dir <Packet> : public Generic ## pType ## dir                              \
+        {}
 
     TypedConnector( Passive, Input  );
     TypedConnector( Passive, Output );
diff --git a/PPI/Route.ih b/PPI/Route.ih
index 01836c9d6..76125e3ba 100644
--- a/PPI/Route.ih
+++ b/PPI/Route.ih
@@ -47,6 +47,8 @@ namespace detail {
     struct RoutingTraitsImplementation
     {
         BOOST_STATIC_ASSERT((boost::is_base_of<connector::Connector, Connector>::value));
+        
+        static bool const event = false;
 
         static bool const notifySource = boost::is_base_of<
             connector::ActiveConnector, Connector>::value;
@@ -66,6 +68,8 @@ namespace detail {
     template <class Event>
     struct RoutingTraitsImplementation<Event,true>
     {
+        static bool const event = true;
+
         static bool const notifySource = false;
         static bool const notifyTarget = true;
 
diff --git a/Packets/ParseHelpers.hh b/Packets/ParseHelpers.hh
index f79e95680..a8d5fbda1 100644
--- a/Packets/ParseHelpers.hh
+++ b/Packets/ParseHelpers.hh
@@ -278,7 +278,7 @@
 
     \ingroup packetparser
  */
-///\ingroup packetparsermacros
+///\addtogroup packetparsermacros
 ///\{
 
 ///\name Control information
-- 
GitLab