Parse unsigned bitfield with up to 32bit's. More...

#include <senf/Packets/IntParser.hh>

Inheritance diagram for senf::UIntFieldParser< Start, End >:

Public Types

typedef boost::uint32_t value_type
 
- Public Types inherited from senf::PacketParserBase
typedef detail::packet::iterator data_iterator
 Raw data iterator type. More...
 
typedef detail::packet::size_type size_type
 Unsigned integral type. More...
 
typedef detail::packet::difference_type difference_type
 Signed integral type. More...
 
typedef detail::packet::byte byte
 Unsigned 8bit value, the raw value type. More...
 
typedef PacketDatastate_type
 Type of the 'state' parameter. More...
 
typedef PacketParserBase parser_base_type
 Base type of the next parser. More...
 

Public Member Functions

 UIntFieldParser (data_iterator i, state_type s)
 
value_type value () const
 
void value (value_type v)
 
UIntFieldParser const & operator= (value_type other)
 
- Public Member Functions inherited from senf::PacketParserBase
data_iterator i () const
 Return beginning of data to parse. More...
 
data_iterator i (size_type offset) const
 Return iterator offset bytes from the start. More...
 
state_type state () const
 Return state of this parser. More...
 
PacketDatadata () const
 Access the packets raw data container. More...
 
void init () const
 Default implementation. More...
 

Static Public Attributes

static size_type const start_bit = Start
 
static size_type const end_bit = End
 
static size_type const fixed_bytes = (End-1)/8+1
 
static value_type const min_value = 0u
 
static value_type const max_value = boost::low_bits_mask_t<End-Start>::sig_bits
 

Related Functions

(Note that these are not member functions.)

template<unsigned Start, unsigned End>
std::ostream & operator<< (std::ostream &os, UIntFieldParser< Start, End > const &i)
 Write parsed value to stream. More...
 

Additional Inherited Members

- Protected Member Functions inherited from senf::PacketParserBase
ParserProtector protect () const
 
 PacketParserBase (data_iterator i, state_type s)
 Standard constructor. More...
 
 PacketParserBase (data_iterator i, state_type s, size_type size)
 Size checking constructor. More...
 
bool check (size_type size) const
 Check size of data container. More...
 
void validate (size_type size) const
 Validate size of data container. More...
 
template<class Parser >
Parser parse (data_iterator i) const
 Create sub-parser. More...
 
template<class Parser , class Arg >
Parser parse (Arg const &arg, data_iterator i) const
 Create sub-parser. More...
 
template<class Parser >
Parser parse (size_type n) const
 Create sub-parser. More...
 
template<class Parser , class Arg >
Parser parse (Arg const &arg, size_type n) const
 Create sub-parser. More...
 
void defaultInit () const
 Default implementation. More...
 
Packet packet () const
 Get packet this parser is parsing from. More...
 
void resize (size_type oldSize, size_type newSize)
 Resize data container. More...
 

Detailed Description

template<unsigned Start, unsigned End>
struct senf::UIntFieldParser< Start, End >

Parse unsigned bitfield with up to 32bit's.

This parser will parse a bitfield beginning at the bit Start and ending before End. Bits are numbered most significant bit first as this is the customary numbering used when defining packet data structures. Start and End can be arbitrary as long as the field is between 1 and 32 bits in size. In other words, IntFieldParser<53,81> is a valid 30 bit field.

When defining a compound parser with several bit fields, you need to take care of the fact, that several integer field parsers will interpret the same data bytes (but not the same bits). It is customary for several integer field parsers to start at the same byte offset with ever increasing bit offsets.

See also
Integer parsers
Implementation note:
The integer field parser is highly optimized. Since the bit positions are compile-time constants, the compiler will create optimized bit-masks to directly access the value. The parser is also optimized to access the minimum number of data bytes necessary.

Definition at line 515 of file IntParser.hh.

Member Typedef Documentation

◆ value_type

template<unsigned Start, unsigned End>
typedef boost::uint32_t senf::UIntFieldParser< Start, End >::value_type

Definition at line 523 of file IntParser.hh.

Constructor & Destructor Documentation

◆ UIntFieldParser()

template<unsigned Start, unsigned End>
senf::UIntFieldParser< Start, End >::UIntFieldParser ( data_iterator  i,
state_type  s 
)
inline

Definition at line 519 of file IntParser.hh.

Member Function Documentation

◆ operator=()

template<unsigned Start, unsigned End>
UIntFieldParser const& senf::UIntFieldParser< Start, End >::operator= ( value_type  other)
inline

Definition at line 532 of file IntParser.hh.

◆ value() [1/2]

template<unsigned Start, unsigned End>
value_type senf::UIntFieldParser< Start, End >::value ( ) const
inline

Definition at line 530 of file IntParser.hh.

◆ value() [2/2]

template<unsigned Start, unsigned End>
void senf::UIntFieldParser< Start, End >::value ( value_type  v)
inline

Definition at line 531 of file IntParser.hh.

Friends And Related Function Documentation

◆ operator<<()

template<unsigned Start, unsigned End>
std::ostream & operator<< ( std::ostream &  os,
UIntFieldParser< Start, End > const &  i 
)
related

Write parsed value to stream.

Definition at line 542 of file IntParser.hh.

Member Data Documentation

◆ end_bit

template<unsigned Start, unsigned End>
size_type const senf::UIntFieldParser< Start, End >::end_bit = End
static

Definition at line 525 of file IntParser.hh.

◆ fixed_bytes

template<unsigned Start, unsigned End>
size_type const senf::UIntFieldParser< Start, End >::fixed_bytes = (End-1)/8+1
static

Definition at line 526 of file IntParser.hh.

◆ max_value

template<unsigned Start, unsigned End>
value_type const senf::UIntFieldParser< Start, End >::max_value = boost::low_bits_mask_t<End-Start>::sig_bits
static

Definition at line 528 of file IntParser.hh.

◆ min_value

template<unsigned Start, unsigned End>
value_type const senf::UIntFieldParser< Start, End >::min_value = 0u
static

Definition at line 527 of file IntParser.hh.

◆ start_bit

template<unsigned Start, unsigned End>
size_type const senf::UIntFieldParser< Start, End >::start_bit = Start
static

Definition at line 524 of file IntParser.hh.


The documentation for this struct was generated from the following file: