Packets/80211Bundle: Complete radiotap dump (incl. unit-test)
[senf.git] / senf / Packets / Packet.cti
index afae606..ecb8baa 100644 (file)
@@ -26,7 +26,7 @@
 //#include "Packet.ih"
 
 // Custom includes
-#include "../Utils/Exception.hh"
+#include <senf/Utils/Exception.hh>
 
 #define prefix_ inline
 ///////////////////////////////cti.p///////////////////////////////////////
@@ -37,7 +37,7 @@
 // conversion constructors
 
 template <class PacketType>
-prefix_ senf::Packet::Packet(ConcretePacket<PacketType> packet)
+prefix_ senf::Packet::Packet(ConcretePacket<PacketType> const & packet)
     : packet_(packet.ptr())
 {}
 
@@ -54,7 +54,7 @@ template <class OtherPacket>
 prefix_ bool senf::Packet::is()
     const
 {
-    return ptr()->is<typename OtherPacket::type>();
+    return valid() && ptr()->is<typename OtherPacket::type>();
 }
 
 template <class OtherPacket>
@@ -232,7 +232,7 @@ senf::ConcretePacket<PacketType>::createAfter(Packet const & packet, size_type s
 
 template <class PacketType>
 prefix_ senf::ConcretePacket<PacketType>
-senf::ConcretePacket<PacketType>::createAfter(Packet const & packet, size_type size, 
+senf::ConcretePacket<PacketType>::createAfter(Packet const & packet, size_type size,
                                               senf::NoInit_t)
 {
     return ConcretePacket(interpreter::createAfter(packet.ptr(), size, senf::noinit));
@@ -267,6 +267,20 @@ senf::ConcretePacket<PacketType>::createBefore(Packet const & packet, senf::NoIn
     return ConcretePacket(interpreter::createBefore(packet.ptr(), senf::noinit));
 }
 
+template <class PacketType>
+prefix_ senf::ConcretePacket<PacketType>
+senf::ConcretePacket<PacketType>::createInsertBefore(Packet const & packet)
+{
+    return ConcretePacket(interpreter::createInsertBefore(packet.ptr()));
+}
+
+template <class PacketType>
+prefix_ senf::ConcretePacket<PacketType>
+senf::ConcretePacket<PacketType>::createInsertBefore(Packet const & packet, senf::NoInit_t)
+{
+    return ConcretePacket(interpreter::createInsertBefore(packet.ptr(), senf::noinit));
+}
+
 // Create a clone of the current packet
 
 template <class PacketType>
@@ -298,7 +312,7 @@ senf::ConcretePacket<PacketType>::operator->()
 // private members
 
 template <class PacketType>
-prefix_ senf::ConcretePacket<PacketType>::ConcretePacket(typename interpreter::ptr packet_)
+prefix_ senf::ConcretePacket<PacketType>::ConcretePacket(typename interpreter::ptr const & packet_)
     : Packet(packet_)
 {}