// Free Software Foundation, Inc.,
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+/** \file
+ \brief ParseInt internal header */
+
#ifndef IH_ParseInt_
#define IH_ParseInt_ 1
///////////////////////////////////////////////////////////////////////////
// Integer operators
+ /** \brief Internal: Integer operation mixin for integer parsers
+
+ \internal
+
+ This class contains all the integer operations supported by the integer parsers. It is
+ inherited by each integer parser.
+ */
template <class Derived, class Value>
class ParseIntOps
{
///////////////////////////////////////////////////////////////////////////
// Network byte order integer extraction
+ /** \brief Internal: Extract 16bit network byte order value
+
+ \internal
+ */
inline boost::uint16_t parse_uint16(iterator i)
{
return i[1] | i[0]<<8;
}
+ /** \brief Internal: Write 16bit network byte order value
+
+ \internal
+ */
inline void write_uint16(iterator i, boost::uint16_t v)
{
i[0] = ( v >> 8 ) & 0xff;
i[1] = ( v ) & 0xff;
}
+ /** \brief Internal: Extract 24bit network byte order value
+
+ \internal
+ */
inline boost::uint32_t parse_uint24(iterator i)
{
return i[2] | i[1]<<8 | i[0]<<16;
}
+ /** \brief Internal: Write 24bit network byte order value
+
+ \internal
+ */
inline void write_uint24(iterator i, boost::uint32_t v)
{
i[0] = ( v >> 16 ) & 0xff;
i[2] = ( v ) & 0xff;
}
+ /** \brief Internal: Extract 32bit network byte order value
+
+ \internal
+ */
inline boost::uint32_t parse_uint32(iterator i)
{
return i[3] | i[2]<<8 | i[1]<<16 | i[0]<<24;
}
+ /** \brief Internal: Write 32bit network byte order value
+
+ \internal
+ */
inline void write_uint32(iterator i, boost::uint32_t v)
{
i[0] = ( v >> 24 ) & 0xff;
# endif
+ /** \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.
+
+ This helper always processes unsigned values. For signed values sign extension still needs
+ to be performed.
+ */
template <unsigned start, unsigned end>
struct parse_bitfield
: public parse_bitfield_i<start/8,(end-1)/8-start/8,start%8,end-8*(start/8)>