X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacket.cti;h=5f67ccbc883df13f4868f37ddca962702a9eb74f;hb=2371b3e67e650b7e829c35e8b4441a8ce2931ac0;hp=492a7d75142a07af1b8c24541a44419ab338c49d;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Packets/Packet.cti b/Packets/Packet.cti index 492a7d7..5f67ccb 100644 --- a/Packets/Packet.cti +++ b/Packets/Packet.cti @@ -60,6 +60,8 @@ template prefix_ OtherPacket senf::Packet::as() const { + if (!is()) + throw std::bad_cast(); return OtherPacket(ptr()->as()); } @@ -67,51 +69,46 @@ template prefix_ OtherPacket senf::Packet::next() const { - OtherPacket p (next(nothrow)); - if (!p) throw InvalidPacketChainException(); - return p; + return next().as(); } - template prefix_ OtherPacket senf::Packet::next(NoThrow_t) const { - Packet p (next()); - return p ? p.findNext(nothrow) : OtherPacket(); + Packet p (next(nothrow)); + return p && p.is() ? p.as() : OtherPacket(); } template -prefix_ OtherPacket senf::Packet::prev() +prefix_ OtherPacket senf::Packet::find() const { - OtherPacket p (prev(nothrow)); + OtherPacket p (find(nothrow)); if (!p) throw InvalidPacketChainException(); return p; } template -prefix_ OtherPacket senf::Packet::prev(NoThrow_t) +prefix_ OtherPacket senf::Packet::prev() const { - Packet p (prev()); - return p ? p.findPrev(nothrow) : OtherPacket(); + return prev().as(); } template -prefix_ OtherPacket senf::Packet::findNext() +prefix_ OtherPacket senf::Packet::prev(NoThrow_t) const { - OtherPacket p (findNext(nothrow)); - if (!p) throw InvalidPacketChainException(); - return p; + Packet p (prev(nothrow)); + return p && p.is() ? p.as() : OtherPacket(); } template -prefix_ OtherPacket senf::Packet::findPrev() +prefix_ OtherPacket senf::Packet::rfind() const { - OtherPacket p (findPrev(nothrow)); + OtherPacket p (rfind(nothrow)); if (!p) throw InvalidPacketChainException(); return p; } @@ -120,28 +117,14 @@ template prefix_ OtherPacket senf::Packet::last() const { - return last().findPrev(); -} - -template -prefix_ OtherPacket senf::Packet::last(NoThrow_t) - const -{ - return last().findPrev(nothrow); + return last().as(); } template prefix_ OtherPacket senf::Packet::first() const { - return first().findNext(); -} - -template -prefix_ OtherPacket senf::Packet::first(NoThrow_t) - const -{ - return first().findNext(nothrow); + return first().as(); } ///////////////////////////////////////////////////////////////////////////