X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FIntParser.hh;h=8c55605ad3fc283cf8d539ac4d9e42f61bdeb4ab;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=4b4a985f56f5cd71e37c9b8a4ef76ab6597daa5a;hpb=412024ed31a4ab4eaea7a4165a434f8efebee325;p=senf.git diff --git a/Packets/IntParser.hh b/Packets/IntParser.hh index 4b4a985..8c55605 100644 --- a/Packets/IntParser.hh +++ b/Packets/IntParser.hh @@ -148,6 +148,34 @@ namespace senf { inline std::ostream & operator<<(std::ostream & os, Int16Parser const & i) { os << i.value(); return os; } + /** \brief Parse 16bit signed byte aligned integer LSB + \see parseint + \ingroup parseint + */ + struct Int16LSBParser + : public detail::packet::IntParserOps, + public PacketParserBase + { + Int16LSBParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} + + /////////////////////////////////////////////////////////////////////////// + + typedef boost::int16_t value_type; + static size_type const fixed_bytes = 2; + static value_type const min_value = -32768; + static value_type const max_value = 32767; + + + value_type value() const { return detail::packet::parse_uint16LSB(i()); } + void value(value_type v) { detail::packet::write_uint16LSB(i(),v); } + Int16LSBParser const & operator= (value_type other) { value(other); return *this; } + }; + /** \brief Write parsed value to stream + \related Int16Parser + */ + inline std::ostream & operator<<(std::ostream & os, Int16LSBParser const & i) + { os << i.value(); return os; } + /** \brief Parse 16bit unsigned byte aligned integer \see parseint \ingroup parseint @@ -175,6 +203,33 @@ namespace senf { inline std::ostream & operator<<(std::ostream & os, UInt16Parser const & i) { os << i.value(); return os; } + /** \brief Parse 16bit unsigned byte aligned integer LSB + \see parseint + \ingroup parseint + */ + struct UInt16LSBParser + : public detail::packet::IntParserOps, + public PacketParserBase + { + UInt16LSBParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} + + /////////////////////////////////////////////////////////////////////////// + + typedef boost::uint16_t value_type; + static size_type const fixed_bytes = 2; + static value_type const min_value = 0u; + static value_type const max_value = 65535u; + + value_type value() const { return detail::packet::parse_uint16LSB(i()); } + void value(value_type v) { detail::packet::write_uint16LSB(i(),v); } + UInt16LSBParser const & operator= (value_type other) { value(other); return *this; } + }; + /** \brief Write parsed value to stream + \related UInt16LSBParser + */ + inline std::ostream & operator<<(std::ostream & os, UInt16LSBParser const & i) + { os << i.value(); return os; } + /** \brief Parse 24bit signed byte aligned integer \see parseint \ingroup parseint @@ -284,6 +339,32 @@ namespace senf { inline std::ostream & operator<<(std::ostream & os, UInt32Parser const & i) { os << i.value(); return os; } + struct UInt32LSBParser + : public detail::packet::IntParserOps, + public PacketParserBase + { + UInt32LSBParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} + + /////////////////////////////////////////////////////////////////////////// + + typedef boost::uint32_t value_type; + static size_type const fixed_bytes = 4; + static value_type const min_value = 0u; + static value_type const max_value = 4294967295u; + + value_type value() const { return detail::packet::parse_uint32LSB(i()); } + void value(value_type v) { detail::packet::write_uint32LSB(i(),v); } + UInt32LSBParser const & operator= (value_type other) { value(other); return *this; } + }; + /** \brief Write parsed value to stream + \related UInt32LSBParser + */ + inline std::ostream & operator<<(std::ostream & os, UInt32LSBParser const & i) + { os << i.value(); return os; } + + + + /** \brief Parse 64bit signed byte aligned integer \see parseint \ingroup parseint @@ -335,6 +416,30 @@ namespace senf { inline std::ostream & operator<<(std::ostream & os, UInt64Parser const & i) { os << i.value(); return os; } + /** \brief Parse 64bit unsigned byte aligned integer LSB + \see parseint + \ingroup parseint + */ + struct UInt64LSBParser + : public detail::packet::IntParserOps, + public PacketParserBase + { + UInt64LSBParser(data_iterator i, state_type s) : PacketParserBase(i,s,fixed_bytes) {} + + /////////////////////////////////////////////////////////////////////////// + + typedef boost::uint64_t value_type; + static size_type const fixed_bytes = 8; + + value_type value() const { return detail::packet::parse_uint64LSB(i()); } + void value(value_type v) { detail::packet::write_uint64LSB(i(),v); } + UInt64LSBParser const & operator= (value_type other) { value(other); return *this; } + }; + /** \brief Write parsed value to stream + \related UInt64LSBParser + */ + inline std::ostream & operator<<(std::ostream & os, UInt64LSBParser const & i) + { os << i.value(); return os; } /** \brief Parse signed bitfield with up to 32bit's