X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketRegistry.hh;h=befc1a52296d05df95be9b749a427582758ccd9f;hb=c52ee9bb7875b227c8d28566c5c7905602e8c3a1;hp=e766914d43d0b399f1232d4ca5d20865389fec83;hpb=3e2082d6966ef4e61ff8a2070b157251e5cb08a6;p=senf.git diff --git a/senf/Packets/PacketRegistry.hh b/senf/Packets/PacketRegistry.hh index e766914..befc1a5 100644 --- a/senf/Packets/PacketRegistry.hh +++ b/senf/Packets/PacketRegistry.hh @@ -91,6 +91,7 @@ namespace senf { { public: typedef typename detail::PacketRegistryImpl::iterator iterator; + typedef typename detail::PacketRegistryImpl::Entry Entry; /** \brief Statically register a packet type in a PacketRegistry @@ -108,7 +109,7 @@ namespace senf { template struct RegistrationProxy { - RegistrationProxy(typename Tag::key_t key); + RegistrationProxy(typename Tag::key_t key, int priority=0); ~RegistrationProxy(); }; @@ -125,11 +126,11 @@ namespace senf { \param key The key of the packet */ template - static void registerPacket(typename Tag::key_t key); + static void registerPacket(typename Tag::key_t key, int priority=0); template static void unregisterPacket(); - static void unregisterPacket(typename Tag::key_t key); + static void unregisterPacket(typename Tag::key_t key, int priority=0); /** \brief Find key of a packet type @@ -180,13 +181,13 @@ namespace senf { \throws PacketTypeNotRegistered if the \a key is not found in the registry \return %Packet entry for given \a key */ - static PkReg_Entry const & lookup(typename Tag::key_t key); + static Entry const & lookup(typename Tag::key_t key); /** \brief Lookup a packet by it's key \return Pointer to packet entry for given \a key or 0, if the key is not found in the registry. */ - static PkReg_Entry const * lookup(typename Tag::key_t key, NoThrow_t); + static Entry const * lookup(typename Tag::key_t key, NoThrow_t); /** \brief Beginning iterator to list of registered keys */ @@ -209,10 +210,24 @@ namespace senf { \ingroup packet_module \hideinitializer */ -# define SENF_PACKET_REGISTRY_REGISTER( registry, value, type ) \ - namespace { \ - senf::PacketRegistry< registry >::RegistrationProxy< type > \ - BOOST_PP_CAT(packetRegistration_, __LINE__) ( value ); \ +# define SENF_PACKET_REGISTRY_REGISTER( registry, value, type ) \ + namespace { \ + senf::PacketRegistry< registry >::RegistrationProxy< type > \ + BOOST_PP_CAT(packetRegistration_, __LINE__) ( value ); \ + } + + /** \brief Statically add an entry to a packet registry + + This macro will declare an anonymous global variable in such a way, that constructing this + variable will add a registration to the given packet registry. + + \ingroup packet_module + \hideinitializer + */ +# define SENF_PACKET_REGISTRY_REGISTER_PRIORITY( registry, value, priority, type ) \ + namespace { \ + senf::PacketRegistry< registry >::RegistrationProxy< type > \ + BOOST_PP_CAT(packetRegistration_, __LINE__) ( value, priority ); \ } /** \brief Dump all packet registries