X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacket.cti;h=8184317b55dbceefd839631076fd5b3276ba154b;hb=7ee689fe38d66aa3a0004d55e8708750d35adc0b;hp=ecb8baa4bb0f8bafcfb0e17a0ffab67e97e052a2;hpb=a0b6f53e5c464c6b84fed30a67fcce32da81012d;p=senf.git diff --git a/senf/Packets/Packet.cti b/senf/Packets/Packet.cti index ecb8baa..8184317 100644 --- a/senf/Packets/Packet.cti +++ b/senf/Packets/Packet.cti @@ -29,9 +29,9 @@ #include #define prefix_ inline -///////////////////////////////cti.p/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::Packet // conversion constructors @@ -62,7 +62,18 @@ prefix_ OtherPacket senf::Packet::as() const { if (!is()) - throw WrapException(std::bad_cast()); + throw WrapException(std::bad_cast()) + << ": called packet::as() with wrong PacketType: " + << (valid() ? typeId().prettyName() : "invalid packet") + << " != " << prettyName(typeid(OtherPacket)); + return OtherPacket(ptr()->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()); } @@ -78,7 +89,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 +114,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 @@ -148,7 +161,7 @@ prefix_ Annotation const & senf::Packet::annotation() return ptr()->annotation(); } -/////////////////////////////////////////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ConcretePacket // structors and default members @@ -317,14 +330,13 @@ prefix_ senf::ConcretePacket::ConcretePacket(typename interpreter::p {} 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/////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_