// $Id$
//
// Copyright (C) 2006
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-// Stefan Bund <stefan.bund@fokus.fraunhofer.de>
+// 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
// it under the terms of the GNU General Public License as published by
/** \file
\brief IntParser internal header */
-#ifndef IH_IntParser_
-#define IH_IntParser_ 1
+#ifndef IH_SENF_Packets_IntParser_
+#define IH_SENF_Packets_IntParser_ 1
// Custom includes
#include "PacketTypes.hh"
// Network byte order integer extraction
/** \brief Internal: Extract 16bit network byte order value
-
+
\internal
*/
inline boost::uint16_t parse_uint16(iterator i)
}
/** \brief Internal: Write 16bit network byte order value
-
+
\internal
*/
inline void write_uint16(iterator i, boost::uint16_t v)
i[1] = ( v ) & 0xff;
}
+ /** \brief Internal: Extract 16bit least significant bit order value
+
+ \internal
+ */
+ inline boost::uint16_t parse_uint16LSB(iterator i)
+ {
+ return i[0] | i[1]<<8;
+ }
+
+ /** \brief Internal: Write 16bit least significant bit order value
+
+ \internal
+ */
+ inline void write_uint16LSB(iterator i, boost::uint16_t v)
+ {
+ i[0] = ( v ) & 0xff;
+ i[1] = ( v >> 8 ) & 0xff;
+ }
+
/** \brief Internal: Extract 24bit network byte order value
-
+
\internal
*/
inline boost::uint32_t parse_uint24(iterator i)
}
/** \brief Internal: Write 24bit network byte order value
-
+
\internal
*/
inline void write_uint24(iterator i, boost::uint32_t v)
}
/** \brief Internal: Extract 32bit network byte order value
-
+
\internal
*/
inline boost::uint32_t parse_uint32(iterator i)
}
/** \brief Internal: Write 32bit network byte order value
-
+
\internal
*/
inline void write_uint32(iterator i, boost::uint32_t v)
i[3] = ( v ) & 0xff;
}
+ /** \brief Internal: Extract 32bit network byte order value
+
+ \internal
+ */
+ inline boost::uint32_t parse_uint32LSB(iterator i)
+ {
+ return i[0] | i[1]<<8 | i[2]<<16 | i[3]<<24;
+ }
+
+ /** \brief Internal: Write 32bit network byte order value
+
+ \internal
+ */
+ inline void write_uint32LSB(iterator i, boost::uint32_t v)
+ {
+ i[3] = ( v >> 24 ) & 0xff;
+ i[2] = ( v >> 16 ) & 0xff;
+ i[1] = ( v >> 8 ) & 0xff;
+ i[0] = ( v ) & 0xff;
+ }
+
+ /** \brief Internal: Extract 64bit network byte order value
+
+ \internal
+ */
+ inline boost::uint64_t parse_uint64(iterator i)
+ {
+ return ((boost::uint64_t)i[7]) | ((boost::uint64_t)i[6])<<8
+ | ((boost::uint64_t)i[5])<<16 | ((boost::uint64_t)i[4])<<24
+ | ((boost::uint64_t)i[3])<<32 | ((boost::uint64_t)i[2])<<40
+ | ((boost::uint64_t)i[1])<<48 | ((boost::uint64_t)i[0])<<56;
+ }
+
+ /** \brief Internal: Write 64bit network byte order value
+
+ \internal
+ */
+ inline void write_uint64(iterator i, boost::uint64_t v)
+ {
+ i[0] = ( v >> 56 ) & 0xff;
+ i[1] = ( v >> 48 ) & 0xff;
+ i[2] = ( v >> 40 ) & 0xff;
+ i[3] = ( v >> 32 ) & 0xff;
+ i[4] = ( v >> 24 ) & 0xff;
+ i[5] = ( v >> 16 ) & 0xff;
+ i[6] = ( v >> 8 ) & 0xff;
+ i[7] = ( v ) & 0xff;
+ }
+
+ /** \brief Internal: Extract 64bit least significant bit order value
+
+ \internal
+ */
+ inline boost::uint64_t parse_uint64LSB(iterator i)
+ {
+ return ((boost::uint64_t)i[0]) | ((boost::uint64_t)i[1])<<8
+ | ((boost::uint64_t)i[2])<<16 | ((boost::uint64_t)i[3])<<24
+ | ((boost::uint64_t)i[4])<<32 | ((boost::uint64_t)i[5])<<40
+ | ((boost::uint64_t)i[6])<<48 | ((boost::uint64_t)i[7])<<56;
+ }
+
+ /** \brief Internal: Write 64bit least significant bit order value
+
+ \internal
+ */
+ inline void write_uint64LSB(iterator i, boost::uint64_t v)
+ {
+ i[0] = ( v ) & 0xff;
+ i[1] = ( v >> 8 ) & 0xff;
+ i[2] = ( v >> 16 ) & 0xff;
+ i[3] = ( v >> 24 ) & 0xff;
+ i[4] = ( v >> 32 ) & 0xff;
+ i[5] = ( v >> 40 ) & 0xff;
+ i[6] = ( v >> 48 ) & 0xff;
+ i[7] = ( v >> 56 ) & 0xff;
+ }
+
///////////////////////////////////////////////////////////////////////////
// bitfield extraction
- // Doxygen doesn't like this stuff ...
+ // Doxygen doesn't like this stuff ...
# ifndef DOXYGEN
/** \brief Internal: Bitfield read/write helper
\internal
-
+
Using template specializations, this class provides optimized bitfield parsers and
writers. For each number of bytes the bitfield covers (from 1 to 5 bytes), a template
specialization is provided in \c parse_bitfield_i.
///////////////////////////////ih.e////////////////////////////////////////
#endif
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100