Packets: Packet Registry unregister() support
[senf.git] / senf / Packets / PacketRegistry.cti
index 2a519b5..a99c59b 100644 (file)
@@ -41,6 +41,17 @@ RegistrationProxy(typename Tag::key_t key)
     PacketRegistry<Tag>::template registerPacket<PacketType>(key);
 }
 
+template <class Tag>
+template <class PacketType>
+prefix_ senf::PacketRegistry<Tag>::RegistrationProxy<PacketType>::~RegistrationProxy()
+{
+    try {
+        PacketRegistry<Tag>::template unregisterPacket<PacketType>();
+    }
+    catch (PacketTypeNotRegisteredException & ex)
+    {}
+}
+
 ///////////////////////////////////////////////////////////////////////////
 // senf::PacketRegistry<Tag>
 
@@ -53,6 +64,19 @@ prefix_ void senf::PacketRegistry<Tag>::registerPacket(typename Tag::key_t key)
 
 template <class Tag>
 template <class PacketType>
+prefix_ void senf::PacketRegistry<Tag>::unregisterPacket()
+{
+    registry().unregisterPacket<PacketType>();
+}
+
+template <class Tag>
+prefix_ void senf::PacketRegistry<Tag>::unregisterPacket(typename Tag::key_t key)
+{
+    registry().unregisterPacket(key);
+}
+
+template <class Tag>
+template <class PacketType>
 prefix_ typename Tag::key_t senf::PacketRegistry<Tag>::key()
 {
     return registry().key(senf::typeIdValue<PacketType>());