Skip to content
Snippets Groups Projects
Commit 354cc867 authored by g0dil's avatar g0dil
Browse files

PPI: Move generic packet typeid check into connector base-class

parent b897d81a
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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 );
......
......@@ -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;
......
......@@ -278,7 +278,7 @@
\ingroup packetparser
*/
///\ingroup packetparsermacros
///\addtogroup packetparsermacros
///\{
///\name Control information
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment