Some adjustments for Ubuntu 8.04
[senf.git] / Packets / Packet.hh
index 371659a..f08a996 100644 (file)
@@ -1,8 +1,8 @@
 // $Id$
 //
-// Copyright (C) 2007 
-// Fraunhofer Institute for Open Communication Systems (FOKUS) 
-// Competence Center NETwork research (NET), St. Augustin, GERMANY 
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
 //     Stefan Bund <g0dil@berlios.de>
 //
 // This program is free software; you can redistribute it and/or modify
@@ -28,7 +28,8 @@
 
 // Custom includes
 #include <boost/operators.hpp>
-
+#include <boost/utility.hpp>
+#include <boost/type_traits/is_integral.hpp>
 #include "../Utils/Exception.hh"
 #include "../Utils/Tags.hh"
 #include "../Utils/safe_bool.hh"
@@ -41,7 +42,7 @@ namespace senf {
 
     /** \defgroup packet_module Packet Handling
 
-        The basic groundwork of the Packet library is the packet handling:
+        The basic groundwork of the %Packet library is the packet handling:
 
         \li The packet classes provide access to a chain of packet headers (more generically called
             interpreters).
@@ -98,16 +99,16 @@ namespace senf {
     ///\addtogroup packet_module
     ///@{
     
-    /** \brief Main Packet class
+    /** \brief Main %Packet class
 
-        Packet is the main externally visible class of the packet library. Packet is a handle into
-        the internal packet representation. From Packet you may access the data of that specific
+        %Packet is the main externally visible class of the packet library. %Packet is a handle into
+        the internal packet representation. From %Packet you may access the data of that specific
         sub-packet/header/interpreter and navigate to the neighboring
         sub-packets/headers/interpreters.
 
-        Packet is protocol agnostic. This class only provides non-protocol dependent members. To
+        %Packet is protocol agnostic. This class only provides non-protocol dependent members. To
         access the protocol specific features of a packet (like header fields) the ConcretePacket
-        class extending Packet is provided.
+        class extending %Packet is provided.
 
         \section packet_semantics Semantics
         
@@ -133,7 +134,7 @@ namespace senf {
         \ref ConcretePacket < \ref EthernetPacketType >).
 
         \see 
-            \ref ConcretePacket for the type specific interface\n
+            \ref ConcretePacket for the %type specific interface\n
             \ref PacketData for the sequence interface\n
             \ref packetparser for a specification of the parser interface
       */
@@ -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 <class ForwardReadableRange>
+        static ConcretePacket create(
+            ForwardReadableRange const & range,
+            typename boost::disable_if< boost::is_integral<ForwardReadableRange> >::type * = 0); 
+#else
         template <class ForwardReadableRange>
         static ConcretePacket create(ForwardReadableRange const & range); 
                                         ///< Create packet from given data
@@ -475,6 +482,7 @@ namespace senf {
                                              \param[in] range <a
                                                  href="http://www.boost.org/libs/range/index.html">Boost.Range</a> 
                                                  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 <class ForwardReadableRange>
+        static ConcretePacket createAfter(
+            Packet packet, 
+            ForwardReadableRange const & range,
+            typename boost::disable_if< boost::is_integral<ForwardReadableRange> >::type * = 0);
+#else
         template <class ForwardReadableRange>
         static ConcretePacket createAfter(Packet packet, 
                                           ForwardReadableRange const & range);
@@ -530,6 +545,7 @@ namespace senf {
                                              \param[in] range <a
                                                  href="http://www.boost.org/libs/range/index.html">Boost.Range</a> 
                                                  of data to construct packet from. */
+#endif
 
         // Create packet as new packet (header) before a given packet