Packet: Implement createInsertBefore() API
[senf.git] / senf / Packets / PacketInterpreter.ct
index 49a34e1..2278181 100644 (file)
@@ -147,10 +147,29 @@ senf::PacketInterpreter<PacketType>::createBefore(PacketInterpreterBase::ptr pac
 {
     if (packet->prev())
         packet->impl().truncateInterpretersBackwards(packet->prev().get());
-    
+
     return create(&packet->impl(),packet->data().begin(),packet->data().end(),Prepend);
 }
 
+template <class PacketType>
+prefix_ typename senf::PacketInterpreter<PacketType>::ptr
+senf::PacketInterpreter<PacketType>::createInsertBefore(PacketInterpreterBase::ptr packet)
+{
+    ptr pi (createInsertBefore(packet, senf::noinit));
+    pi->data().insert(pi->data().begin(),initHeadSize(),byte(0x00u));
+    pi->data().insert(pi->data().end(),initSize()-initHeadSize(),byte(0x00u));
+    pi->init();
+    return pi;
+}
+
+template <class PacketType>
+prefix_ typename senf::PacketInterpreter<PacketType>::ptr
+senf::PacketInterpreter<PacketType>::createInsertBefore(PacketInterpreterBase::ptr packet,
+                                                        senf::NoInit_t)
+{
+    return create(&packet->impl(),packet->data().begin(),packet->data().end(),packet);
+}
+
 ////////////////////////////////////////
 // private members
 
@@ -332,6 +351,24 @@ createBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t)
     return senf::PacketInterpreter<PacketType>::createBefore(packet,senf::noinit);
 }
 
+template <class PacketType>
+prefix_ senf::PacketInterpreterBase::ptr
+senf::PacketInterpreter<PacketType>::FactoryImpl::
+createInsertBefore(PacketInterpreterBase::ptr packet)
+    const
+{
+    return senf::PacketInterpreter<PacketType>::createInsertBefore(packet);
+}
+
+template <class PacketType>
+prefix_ senf::PacketInterpreterBase::ptr
+senf::PacketInterpreter<PacketType>::FactoryImpl::
+createInsertBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t)
+    const
+{
+    return senf::PacketInterpreter<PacketType>::createInsertBefore(packet,senf::noinit);
+}
+
 // Parse next packet in chain
 
 template <class PacketType>