Packets: support is<SomePacketType>() for in-valid Packets
tho [Tue, 8 Jun 2010 10:51:51 +0000 (10:51 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1635 270642c3-0616-0410-b53a-bc976706d245

senf/PPI/SocketSink.hh
senf/Packets/Packet.cti
senf/Packets/Packet.test.cc

index a42a0b9..03b64c1 100644 (file)
@@ -302,7 +302,7 @@ namespace module {
         Handle & handle();              ///< Access handle
         void handle(Handle handle);     ///< Set handle
                                         /**< Assigning an empty or in-valid() handle will disable
-                                             the module until a new. valid handle is assigned. */
+                                             the module until a new valid handle is assigned. */
 
 #ifndef DOXYGEN
         void replaceHandle(Handle newHandle);
index 5d79a2b..9ba8a4b 100644 (file)
@@ -54,7 +54,7 @@ template <class OtherPacket>
 prefix_ bool senf::Packet::is()
     const
 {
-    return ptr()->is<typename OtherPacket::type>();
+    return valid() && ptr()->is<typename OtherPacket::type>();
 }
 
 template <class OtherPacket>
index e917d72..aeca47d 100644 (file)
@@ -152,12 +152,14 @@ namespace {
 
 SENF_AUTO_UNIT_TEST(packet)
 {
+    BOOST_CHECK(! senf::Packet().is<BarPacket>() );
     senf::Packet packet (FooPacket::create());
     BarPacket::createAfter(packet);
 
     BOOST_REQUIRE( packet );
     BOOST_CHECK( packet.next() );
     BOOST_CHECK( ! packet.next().next(senf::nothrow) );
+    BOOST_CHECK( ! packet.next().next(senf::nothrow).is<BarPacket>() );
     BOOST_CHECK( ! packet.prev(senf::nothrow) );
     BOOST_CHECK( packet.next().prev() == packet );
     SENF_CHECK_NOT_EQUAL( packet.next(), packet );