Variant parser. More...
#include <senf/Packets/VariantParser.hh>
Public Member Functions | |
unsigned | variant () const |
Get current variant. More... | |
template<unsigned N> | |
boost::mpl::at< parsers, boost::mpl::int_< N > >::type | get () const |
Access sub-parser. More... | |
template<unsigned N> | |
void | init () |
Re-initialize field. More... | |
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... | |
PacketData & | data () const |
Access the packets raw data container. More... | |
void | init () const |
Default implementation. More... | |
Parser interface | |
static const size_type | init_bytes |
VariantParser (data_iterator i, state_type s) | |
VariantParser (AuxPolicy policy, data_iterator i, state_type s) | |
size_type | bytes () const |
void | init () |
Additional Inherited Members | |
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 PacketData * | state_type |
Type of the 'state' parameter. More... | |
typedef PacketParserBase | parser_base_type |
Base type of the next parser. More... | |
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... | |
Variant parser.
This is not really a collection parser (it does not provide a collection interface). However, it is not a composite parser or value parser either.
A variant parser will parse any number of sub-parsers discriminated by an arbitrary, policy defined condition. This is the parser to use, if the type and/or number of fields of a packet change depending on some condition.
This typedef defines a variant parser choosing one of three sub parsers. senf::VoidPacketParser is an empty parser, it effectively makes this parser optional.
When creating a new packet containing a variant parser, the variant parser will always be initialized to the first sub-parser.
Definition at line 71 of file VariantParser.hh.
senf::VariantParser< AuxPolicy, Parsers >::VariantParser | ( | data_iterator | i, |
state_type | s | ||
) |
senf::VariantParser< AuxPolicy, Parsers >::VariantParser | ( | AuxPolicy | policy, |
data_iterator | i, | ||
state_type | s | ||
) |
size_type senf::VariantParser< AuxPolicy, Parsers >::bytes | ( | ) | const |
boost::mpl::at< parsers, boost::mpl::int_<N> >::type senf::VariantParser< AuxPolicy, Parsers >::get | ( | ) | const |
void senf::VariantParser< AuxPolicy, Parsers >::init | ( | ) |
void senf::VariantParser< AuxPolicy, Parsers >::init | ( | ) |
Re-initialize field.
This will reinitialize the field to the variant sub-parser at index N changing the currently selected variant.
unsigned senf::VariantParser< AuxPolicy, Parsers >::variant | ( | ) | const |
Get current variant.
Get the currently selected variant index. The returned number directly indexes the list of sub parsers.
|
static |
Definition at line 86 of file VariantParser.hh.