X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacket.cti;h=902681b3deea940c84a1a79972c7d86c7f8723ce;hb=78a6e233083efa63a9cd0684a92abc64202a9ee7;hp=9ba8a4bf351147b34bb3a5bc5a5f1be38b1becab;hpb=fe0d7de8d8f1044759fabdbb534fef41f9944ffc;p=senf.git diff --git a/senf/Packets/Packet.cti b/senf/Packets/Packet.cti index 9ba8a4b..902681b 100644 --- a/senf/Packets/Packet.cti +++ b/senf/Packets/Packet.cti @@ -37,7 +37,7 @@ // conversion constructors template -prefix_ senf::Packet::Packet(ConcretePacket packet) +prefix_ senf::Packet::Packet(ConcretePacket const & packet) : packet_(packet.ptr()) {} @@ -67,6 +67,14 @@ prefix_ OtherPacket senf::Packet::as() } template +prefix_ OtherPacket senf::Packet::as(NoThrow_t) + const +{ + SENF_ASSERT( is(), "Bad cast, called packet::as(nothrow) with wrong PacketType"); + return OtherPacket(ptr()->as()); +} + +template prefix_ OtherPacket senf::Packet::next() const { @@ -78,7 +86,8 @@ prefix_ OtherPacket senf::Packet::next(NoThrow_t) const { Packet p (next(nothrow)); - return p && p.is() ? p.as() : OtherPacket(); + return p && p.is() ? + OtherPacket(p.ptr()->as()) : OtherPacket(); } template @@ -102,7 +111,8 @@ prefix_ OtherPacket senf::Packet::prev(NoThrow_t) const { Packet p (prev(nothrow)); - return p && p.is() ? p.as() : OtherPacket(); + return p && p.is() ? + OtherPacket(p.ptr()->as()) : OtherPacket(); } template @@ -312,16 +322,15 @@ senf::ConcretePacket::operator->() // private members template -prefix_ senf::ConcretePacket::ConcretePacket(typename interpreter::ptr packet_) +prefix_ senf::ConcretePacket::ConcretePacket(typename interpreter::ptr const & packet_) : Packet(packet_) {} template -prefix_ typename senf::ConcretePacket::interpreter::ptr -senf::ConcretePacket::ptr() +prefix_ typename senf::ConcretePacket::interpreter * senf::ConcretePacket::ptr() const { - return boost::static_pointer_cast< PacketInterpreter >(Packet::ptr()); + return static_cast< PacketInterpreter *>( Packet::ptr().get()); } ///////////////////////////////cti.e///////////////////////////////////////