X-Git-Url: http://g0dil.de/git?p=senf.git;a=blobdiff_plain;f=senf%2FPackets%2FPacket.ct;fp=senf%2FPackets%2FPacket.ct;h=7a403201c0235ba53212089c1a5531bd175fdbe8;hp=d7d58a7488114ee037de56a8aac0f35ad236cb64;hb=ecbf10f737b7f1305670600ac0f1134625f14f05;hpb=d5b4cca5714c2b44bbc476636a0774b4fcbd9151 diff --git a/senf/Packets/Packet.ct b/senf/Packets/Packet.ct index d7d58a7..7a40320 100644 --- a/senf/Packets/Packet.ct +++ b/senf/Packets/Packet.ct @@ -65,6 +65,27 @@ prefix_ OtherPacket senf::Packet::rfind(NoThrow_t) } //-///////////////////////////////////////////////////////////////////////////////////////////////// +// senf::ConcretePacket + +template +template +prefix_ OtherPacket senf::ConcretePacket::next(NoThrow_t) + const +{ + PacketInterpreterBase::ptr p (Packet::ptr()->next()); + if (p) + return (p->typeId() == typeIdValue()) ? + OtherPacket(p->as()) : OtherPacket(); + PacketInterpreterBase::optional_range r (type::nextPacketRange(*this)); + if (r && ! r->empty()) { + PacketInterpreterBase::ptr nxt (getNext(r)); + if (nxt && nxt->typeId() == typeIdValue()) + return OtherPacket(nxt->as()); + } + return OtherPacket(); +} + +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_