//#include "Packet.ih"
// Custom includes
-#include "../Utils/Exception.hh"
+#include <senf/Utils/Exception.hh>
#define prefix_ inline
///////////////////////////////cti.p///////////////////////////////////////
// conversion constructors
template <class PacketType>
-prefix_ senf::Packet::Packet(ConcretePacket<PacketType> packet)
+prefix_ senf::Packet::Packet(ConcretePacket<PacketType> const & packet)
: packet_(packet.ptr())
{}
prefix_ bool senf::Packet::is()
const
{
- return ptr()->is<typename OtherPacket::type>();
+ return valid() && ptr()->is<typename OtherPacket::type>();
}
template <class OtherPacket>
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));
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>
// 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_)
{}