From: g0dil Date: Thu, 20 Mar 2008 09:27:14 +0000 (+0000) Subject: Packets: Add disable_if condition to allow signed int args to ConcretePacket::create() X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=784b5901486e0bcb0eb5dadd3a2f4fc31810bd66;p=senf.git Packets: Add disable_if condition to allow signed int args to ConcretePacket::create() git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@751 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Packets/Packet.cti b/Packets/Packet.cti index bea5af7..b58b783 100644 --- a/Packets/Packet.cti +++ b/Packets/Packet.cti @@ -175,8 +175,9 @@ senf::ConcretePacket::create(size_type size, senf::NoInit_t) template template -prefix_ senf::ConcretePacket -senf::ConcretePacket::create(ForwardReadableRange const & range) +prefix_ senf::ConcretePacket senf::ConcretePacket:: +create(ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type *) { return ConcretePacket(interpreter::create(range)); } @@ -213,8 +214,9 @@ senf::ConcretePacket::createAfter(Packet packet, size_type size, sen template template -prefix_ senf::ConcretePacket -senf::ConcretePacket::createAfter(Packet packet, ForwardReadableRange const & range) +prefix_ senf::ConcretePacket senf::ConcretePacket:: +createAfter(Packet packet, ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type *) { return ConcretePacket(interpreter::createAfter(packet.ptr(), range)); } diff --git a/Packets/Packet.hh b/Packets/Packet.hh index 18b3020..f08a996 100644 --- a/Packets/Packet.hh +++ b/Packets/Packet.hh @@ -28,7 +28,8 @@ // Custom includes #include - +#include +#include #include "../Utils/Exception.hh" #include "../Utils/Tags.hh" #include "../Utils/safe_bool.hh" @@ -465,6 +466,12 @@ namespace senf { \param[in] size Size of the packet to create in bytes \param[in] senf::noinit This parameter must always have the value \c senf::noinit. */ +#ifndef DOXYGEN + template + static ConcretePacket create( + ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type * = 0); +#else template static ConcretePacket create(ForwardReadableRange const & range); ///< Create packet from given data @@ -475,6 +482,7 @@ namespace senf { \param[in] range Boost.Range of data to construct packet from. */ +#endif // Create packet as new packet after a given packet @@ -516,6 +524,13 @@ namespace senf { \param[in] size Size of the packet to create in bytes \param[in] senf::noinit This parameter must always have the value \c senf::noinit. */ +#ifndef DOXYGEN + template + static ConcretePacket createAfter( + Packet packet, + ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type * = 0); +#else template static ConcretePacket createAfter(Packet packet, ForwardReadableRange const & range); @@ -530,6 +545,7 @@ namespace senf { \param[in] range Boost.Range of data to construct packet from. */ +#endif // Create packet as new packet (header) before a given packet diff --git a/Packets/Packet.test.cc b/Packets/Packet.test.cc index 5a6fd97..937901c 100644 --- a/Packets/Packet.test.cc +++ b/Packets/Packet.test.cc @@ -197,7 +197,8 @@ BOOST_AUTO_UNIT_TEST(concretePacket) BOOST_CHECK_EQUAL( FooPacket::create().size(), 4u ); BOOST_CHECK_EQUAL( FooPacket::create(senf::noinit).size(), 0u ); BOOST_CHECK_THROW( FooPacket::create(2u), senf::TruncatedPacketException ); - BOOST_CHECK_EQUAL( FooPacket::create(10u).size(), 10u ); + // No 'u' suffix here to check, that the disable_if works ... + BOOST_CHECK_EQUAL( FooPacket::create(10).size(), 10u ); BOOST_CHECK_EQUAL( FooPacket::create(2u,senf::noinit).size(), 2u ); BOOST_CHECK_EQUAL( FooPacket::create(data).size(), 6u ); @@ -210,7 +211,8 @@ BOOST_AUTO_UNIT_TEST(concretePacket) BOOST_CHECK_EQUAL( packet.size(), 4u ); BOOST_CHECK_THROW( FooPacket::createAfter(packet,2u), senf::TruncatedPacketException ); - BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,10u).size(), 10u ); + // No 'u' suffix here to check, that the disable_if works ... + BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,10).size(), 10u ); BOOST_CHECK_EQUAL( packet.size(), 14u ); BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,2u,senf::noinit).size(), 2u );