X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FIntParser.ih;h=16099c1cfc1c8ee0568c1cce552c3257e26b9603;hb=bd9f9d3fd6fbcff0112a7bf48ab9284da9576b11;hp=9ad8a1dc8ca38fccd487e334a26b1f6339d3a57b;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Packets/IntParser.ih b/Packets/IntParser.ih index 9ad8a1d..16099c1 100644 --- a/Packets/IntParser.ih +++ b/Packets/IntParser.ih @@ -23,8 +23,8 @@ /** \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" @@ -114,6 +114,25 @@ namespace packet { 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 @@ -155,6 +174,83 @@ namespace packet { 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 @@ -263,7 +359,7 @@ namespace packet { ///////////////////////////////ih.e//////////////////////////////////////// #endif - + // Local Variables: // mode: c++ // fill-column: 100