X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketInterpreter.ct;h=428f54f9757bfeeb96c5b60ffd80f96a45dd5023;hb=84f14a42f9993e186c7897ce0db021300e0a2d48;hp=49a34e1649e714c45247a0773654488b437308df;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Packets/PacketInterpreter.ct b/senf/Packets/PacketInterpreter.ct index 49a34e1..428f54f 100644 --- a/senf/Packets/PacketInterpreter.ct +++ b/senf/Packets/PacketInterpreter.ct @@ -43,11 +43,11 @@ senf::PacketInterpreterBase::parseNextAs() optional_range r (nextPacketRange()); if (!r) throw InvalidPacketChainException(); - + if (next()) impl().truncateInterpreters(next().get()); - typename PacketInterpreter::ptr pi + typename PacketInterpreter::ptr pi (PacketInterpreter::create(&impl(),r->begin(),r->end(),Append)); return pi; } @@ -118,7 +118,7 @@ senf::PacketInterpreter::createAfter(PacketInterpreterBase::ptr pack optional_range r (packet->nextPacketRange()); if (!r) throw InvalidPacketChainException(); - + if (packet->next()) packet->impl().truncateInterpreters(packet->next().get()); @@ -147,10 +147,29 @@ senf::PacketInterpreter::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 +prefix_ typename senf::PacketInterpreter::ptr +senf::PacketInterpreter::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 +prefix_ typename senf::PacketInterpreter::ptr +senf::PacketInterpreter::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::createBefore(packet,senf::noinit); } +template +prefix_ senf::PacketInterpreterBase::ptr +senf::PacketInterpreter::FactoryImpl:: +createInsertBefore(PacketInterpreterBase::ptr packet) + const +{ + return senf::PacketInterpreter::createInsertBefore(packet); +} + +template +prefix_ senf::PacketInterpreterBase::ptr +senf::PacketInterpreter::FactoryImpl:: +createInsertBefore(PacketInterpreterBase::ptr packet, senf::NoInit_t) + const +{ + return senf::PacketInterpreter::createInsertBefore(packet,senf::noinit); +} + // Parse next packet in chain template @@ -342,7 +379,7 @@ senf::PacketInterpreter::FactoryImpl::parseNext(PacketInterpreterBas optional_range r (packet->nextPacketRange()); if (!r) throw InvalidPacketChainException(); - + if (packet->next()) packet->impl().truncateInterpreters(packet->next().get()); @@ -350,7 +387,7 @@ senf::PacketInterpreter::FactoryImpl::parseNext(PacketInterpreterBas } template -const typename senf::PacketInterpreter::FactoryImpl +const typename senf::PacketInterpreter::FactoryImpl senf::PacketInterpreter::factory_; ///////////////////////////////ct.e////////////////////////////////////////