X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacket.cci;h=cb9e4de79c79558277f31fc8130780712b73ab87;hb=78a6e233083efa63a9cd0684a92abc64202a9ee7;hp=54b65f11f77800ff7e0a8f47dee372828035a0bb;hpb=a0b6f53e5c464c6b84fed30a67fcce32da81012d;p=senf.git diff --git a/senf/Packets/Packet.cci b/senf/Packets/Packet.cci index 54b65f1..cb9e4de 100644 --- a/senf/Packets/Packet.cci +++ b/senf/Packets/Packet.cci @@ -64,7 +64,9 @@ prefix_ senf::Packet senf::Packet::next(NoThrow_t) const { PacketInterpreterBase::ptr p (ptr()->next()); - return !p && ptr()->nextPacketRange() ? checkNext() : Packet(p); + if (p) return Packet(p); + PacketInterpreterBase::optional_range r (ptr()->nextPacketRange()); + return (r && ! r->empty()) ? getNext() : Packet(); } prefix_ senf::Packet senf::Packet::next() @@ -99,7 +101,7 @@ prefix_ senf::Packet senf::Packet::last() const { Packet p (ptr()->last()); - return p.next(nothrow) ? checkLast() : p; + return p.next(nothrow) ? getLast() : p; } prefix_ senf::Packet senf::Packet::parseNextAs(factory_t factory) @@ -189,6 +191,12 @@ prefix_ bool senf::Packet::valid() return *this; } +prefix_ bool senf::Packet::is_shared() + const +{ + return ptr()->is_shared() || (ptr()->impl().refcount() > 1); +} + template prefix_ Parser senf::operator<<(Parser target, ConcretePacket const & packet) {