Skip to content
Snippets Groups Projects
Commit fd85caaf authored by g0dil's avatar g0dil
Browse files

Packets: Clean up ParseHelpers implementation

parent 988b5b28
No related branches found
No related tags found
No related merge requests found
......@@ -54,7 +54,7 @@ namespace senf {
SENF_PARSE_FIELD( mac_addr_2, Parse_UInt8 );
SENF_PARSE_FIELD( mac_addr_1, Parse_UInt8 );
SENF_PARSER_FINALIZE_INHERITED(Parse_DatagramSection, Parse_DSMCCSection);
SENF_PARSER_FINALIZE(Parse_DatagramSection);
typedef Parse_UIntField < 2, 4 > Parse_payload_scrmbl_ctrl;
typedef Parse_UIntField < 4, 6 > Parse_addr_scrmbl_ctrl;
......
......@@ -241,6 +241,7 @@ namespace senf {
typedef detail::packet::difference_type difference_type; ///< Signed integral type
typedef detail::packet::byte byte; ///< Unsigned 8bit value, the raw value type
typedef PacketData * state_type; ///< Type of the 'state' parameter
typedef PacketParserBase parser_base_type; ///< Base type of the next parser
///////////////////////////////////////////////////////////////////////////
///\name Structors and default members
......
......@@ -146,79 +146,25 @@
\ingroup packetparser
*/
#define SENF_FIXED_PARSER() SENF_ABSOLUTE_INCLUDE_PATH(Packets/parse_fixed_setup.hh)
#define SENF_PARSER() SENF_ABSOLUTE_INCLUDE_PATH(Packets/parse_setup.hh)
#define SENF_FIXED_PARSER_INITIALIZE() \
private: \
SENF_MPL_SLOT_DEF_ZERO(index); \
SENF_MPL_SLOT_DEF_ZERO(offset); \
SENF_MPL_SLOT_DEF_ZERO(bit); \
SENF_MPL_SLOT_DEF_ZERO(bitfield_size); \
void init_chain(senf::mpl::rv<0>*) {} \
public:
#define SENF_PARSER_INITIALIZE() \
private: \
SENF_MPL_SLOT_DEF_ZERO(index); \
SENF_MPL_SLOT_DEF_ZERO(init_bytes); \
SENF_MPL_SLOT_DEF_ZERO(bit); \
SENF_MPL_SLOT_DEF_ZERO(bitfield_size); \
void init_chain(senf::mpl::rv<0>*) {} \
size_type field_offset_(senf::mpl::rv<0>*) const { return 0; } \
public:
#define SENF_PARSER_FIELD(name, type) SENF_PARSER_FIELD_I(name, type, var, rw)
#define SENF_PARSER_FIELD_RO(name, type) SENF_PARSER_FIELD_I(name, type, var, ro)
#define SENF_PARSER_CUSTOM_FIELD(name, type, size) SENF_PARSER_CUSTOM_FIELD_I(name, type, size, var)
#define SENF_PARSER_FIXED_FIELD(name, type) SENF_PARSER_FIELD_I(name, type, fix, rw)
#define SENF_PARSER_FIXED_FIELD_RO(name, type) SENF_PARSER_FIELD_I(name, type, fix, ro)
#define SENF_PARSER_FIXED_CUSTOM_FIELD(name, type, size) SENF_PARSER_CUSTOM_FIELD_I(name, type, size, fix)
#define SENF_PARSER_FIELD_AFTER(name, type, prev) SENF_PARSER_FIELD_I_AFTER(name, type, prev, var, rw)
#define SENF_PARSER_FIELD_RO_AFTER(name, type, prev) SENF_PARSER_FIELD_I_AFTER(name, type, prev, var, ro)
#define SENF_PARSER_CUSTOM_FIELD_AFTER(name, type, size, prev) SENF_PARSER_CUSTOM_FIELD_I_AFTER(name, type, size, prev, var)
#define SENF_PARSER_FIXED_FIELD_AFTER(name, type, prev) SENF_PARSER_FIELD_I_AFTER(name, type, prev, fix, rw)
#define SENF_PARSER_FIXED_FIELD_RO_AFTER(name, type, prev) SENF_PARSER_FIELD_I_AFTER(name, type, prev, fix, ro)
#define SENF_PARSER_FIXED_CUSTOM_FIELD_AFTER(name, type, size, prev) SENF_PARSER_CUSTOM_FIELD_I_AFTER(name, type, size, prev, fix)
#define SENF_PARSER_BITFIELD(name, bits, type) SENF_PARSER_BITFIELD_I(name, bits, type, var, rw)
#define SENF_PARSER_BITFIELD_RO(name, bits, type) SENF_PARSER_BITFIELD_I(name, bits, type, var, ro)
#define SENF_PARSER_FIXED_BITFIELD(name, bits, type) SENF_PARSER_BITFIELD_I(name, bits, type, fix, rw)
#define SENF_PARSER_FIXED_BITFIELD_RO(name, bits, type) SENF_PARSER_BITFIELD_I(name, bits, type, fix, ro)
#define SENF_PARSER_INIT() \
void init(int)
#define SENF_PARSER_FINALIZE_GENERIC(name, base) \
void defaultInit() { \
init_chain(static_cast<senf::mpl::rv<SENF_MPL_SLOT_GET(index)>*>(0)); \
} \
name(data_iterator i, state_type s) : base(i,s) {} \
private: \
template <class T> void init(T) { defaultInit(); } \
public: \
void init() { init(0); }
#define SENF_PARSER_FINALIZE_INHERITED_DYNAMIC(name, base) \
SENF_PARSER_FINALIZE_GENERIC(name, base) \
size_type bytes() const { \
return field_offset_(static_cast<senf::mpl::rv<SENF_MPL_SLOT_GET(index)>*>(0)); \
} \
static size_type const init_bytes = SENF_MPL_SLOT_GET(init_bytes)
#define SENF_PARSER_FINALIZE_INHERITED_FIXED(name, base) \
SENF_PARSER_FINALIZE_GENERIC(name, base) \
static size_type const fixed_bytes = SENF_MPL_SLOT_GET(offset);
#define SENF_PARSER_FINALIZE_FIXED(name) \
SENF_PARSER_FINALIZE_INHERITED_FIXED(name, senf::PacketParserBase)
#define SENF_PARSER_FINALIZE_DYNAMIC(name) \
SENF_PARSER_FINALIZE_INHERITED_DYNAMIC(name, senf::PacketParserBase)
#define SENF_FIXED_PARSER() SENF_ABSOLUTE_INCLUDE_PATH(Packets/parse_fixed_setup.hh)
#define SENF_PARSER() SENF_ABSOLUTE_INCLUDE_PATH(Packets/parse_setup.hh)
#define SENF_PARSER_INHERIT BOOST_PP_CAT( SENF_PARSER_INHERIT_ , SENF_PARSER_TYPE )
#define SENF_PARSE_FIELD BOOST_PP_CAT( SENF_PARSE_FIELD_ , SENF_PARSER_TYPE )
#define SENF_PARSE_FIELD_RO BOOST_PP_CAT( SENF_PARSE_FIELD_RO_ , SENF_PARSER_TYPE )
#define SENF_PARSE_CUSTOM_FIELD BOOST_PP_CAT( SENF_PARSE_CUSTOM_FIELD_ , SENF_PARSER_TYPE )
#define SENF_PARSE_BITFIELD BOOST_PP_CAT( SENF_PARSE_BITFIELD_ , SENF_PARSER_TYPE )
#define SENF_PARSE_BITFIELD_RO BOOST_PP_CAT( SENF_PARSE_BITFIELD_RO_ , SENF_PARSER_TYPE )
#define SENF_PARSER_FINALIZE BOOST_PP_CAT( SENF_PARSER_FINALIZE_ , SENF_PARSER_TYPE )
#define SENF_PARSER_SKIP BOOST_PP_CAT( SENF_PARSER_SKIP_ , SENF_PARSER_TYPE )
#define SENF_PARSER_GOTO BOOST_PP_CAT( SENF_PARSER_GOTO_ , SENF_PARSER_TYPE )
#define SENF_PARSER_GOTO_OFFSET BOOST_PP_CAT( SENF_PARSER_GOTO_OFFSET_ , SENF_PARSER_TYPE )
#define SENF_PARSER_LABEL BOOST_PP_CAT( SENF_PARSER_LABEL_ , SENF_PARSER_TYPE )
#define SENF_PARSER_INIT() void init(int)
///////////////////////////////hh.e////////////////////////////////////////
#endif
......
This diff is collapsed.
......@@ -23,37 +23,13 @@
/** \file
\brief parse_fixed_setup public header */
#ifdef SENF_PARSER_SETUP_INCLUDED
# undef SENF_PARSE_FIELD
# undef SENF_PARSE_FIELD_RO
# undef SENF_PARSE_FIELD_AFTER
# undef SENF_PARSE_FIELD_AFTER_RO
# undef SENF_PARSE_CUSTOM_FIELD
# undef SENF_PARSE_CUSTOM_FIELD_AFTER
# undef SENF_PARSE_BITFIELD
# undef SENF_PARSE_BITFIELD_RO
# undef SENF_PARSER_INHERIT
# undef SENF_PARSER_FINALIZE
# undef SENF_PARSER_FINALIZE_INHERITED
# undef SENF_PARSER_SETUP_INCLUDED
#ifdef SENF_PARSER_TYPE
# undef SENF_PARSER_TYPE
#endif
#define SENF_PARSE_FIELD SENF_PARSER_FIXED_FIELD
#define SENF_PARSE_FIELD_RO SENF_PARSER_FIXED_FIELD_RO
#define SENF_PARSE_FIELD_AFTER SENF_PARSER_FIXED_FIELD_AFTER
#define SENF_PARSE_FIELD_AFTER_RO SENF_PARSER_FIXED_FIELD_AFTER_RO
#define SENF_PARSE_CUSTOM_FIELD SENF_PARSER_FIXED_CUSTOM_FIELD
#define SENF_PARSE_CUSTOM_FIELD_AFTER SENF_PARSER_FIXED_CUSTOM_FIELD_AFTER
#define SENF_PARSE_BITFIELD SENF_PARSER_FIXED_BITFIELD
#define SENF_PARSE_BITFIELD_RO SENF_PARSER_FIXED_BITFIELD_RO
#define SENF_PARSER_TYPE fix
#define SENF_PARSER_INHERIT SENF_PARSER_FIXED_INHERIT_I
#define SENF_PARSER_FINALIZE SENF_PARSER_FINALIZE_FIXED
#define SENF_PARSER_FINALIZE_INHERITED SENF_PARSER_FINALIZE_INHERITED_FIXED
#define SENF_PARSER_SETUP_INCLUDED 1
SENF_FIXED_PARSER_INITIALIZE()
SENF_PARSER_INITIALIZE()
// Local Variables:
......
......@@ -23,35 +23,11 @@
/** \file
\brief parse_setup public header */
#ifdef SENF_PARSER_SETUP_INCLUDED
# undef SENF_PARSE_FIELD
# undef SENF_PARSE_FIELD_RO
# undef SENF_PARSE_FIELD_AFTER
# undef SENF_PARSE_FIELD_AFTER_RO
# undef SENF_PARSE_CUSTOM_FIELD
# undef SENF_PARSE_CUSTOM_FIELD_AFTER
# undef SENF_PARSE_BITFIELD
# undef SENF_PARSE_BITFIELD_RO
# undef SENF_PARSER_INHERIT
# undef SENF_PARSER_FINALIZE
# undef SENF_PARSER_FINALIZE_INHERITED
# undef SENF_PARSER_SETUP_INCLUDED
#ifdef SENF_PARSER_TYPE
# undef SENF_PARSER_TYPE
#endif
#define SENF_PARSE_FIELD SENF_PARSER_FIELD
#define SENF_PARSE_FIELD_RO SENF_PARSER_FIELD_RO
#define SENF_PARSE_FIELD_AFTER SENF_PARSER_FIELD_AFTER
#define SENF_PARSE_FIELD_AFTER_RO SENF_PARSER_FIELD_AFTER_RO
#define SENF_PARSE_CUSTOM_FIELD SENF_PARSER_CUSTOM_FIELD
#define SENF_PARSE_CUSTOM_FIELD_AFTER SENF_PARSER_CUSTOM_FIELD_AFTER
#define SENF_PARSE_BITFIELD SENF_PARSER_BITFIELD
#define SENF_PARSE_BITFIELD_RO SENF_PARSER_BITFIELD_RO
#define SENF_PARSER_INHERIT SENF_PARSER_INHERIT_I
#define SENF_PARSER_FINALIZE SENF_PARSER_FINALIZE_DYNAMIC
#define SENF_PARSER_FINALIZE_INHERITED SENF_PARSER_FINALIZE_INHERITED_DYNAMIC
#define SENF_PARSER_SETUP_INCLUDED 1
#define SENF_PARSER_TYPE var
SENF_PARSER_INITIALIZE()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment