X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseHelpers.hh;h=9eff3949a311422884a3f7c58e2df7c61b214076;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=31fa8b5e4a6c494d077d917d228153e060471535;hpb=6a9425b523ea9a2bd41103dd10659ac8c7c0d080;p=senf.git diff --git a/Packets/ParseHelpers.hh b/Packets/ParseHelpers.hh index 31fa8b5..9eff394 100644 --- a/Packets/ParseHelpers.hh +++ b/Packets/ParseHelpers.hh @@ -23,10 +23,10 @@ /** \file \brief ParseHelpers public header */ -#ifndef HH_ParseHelpers_ -#define HH_ParseHelpers_ 1 +#ifndef HH_SENF_Packets_ParseHelpers_ +#define HH_SENF_Packets_ParseHelpers_ 1 -#ifndef HH_Packets_ +#ifndef HH_SENF_Packets_Packets_ #error "Don't include 'ParseHelpers.hh' directly, include 'Packets.hh'" #endif @@ -180,7 +180,7 @@ \par "" \ref SENF_PARSER_FIELD(), \ref SENF_PARSER_FIELD_RO(), \ref SENF_PARSER_PRIVATE_FIELD(), - \ref SENF_PARSER_PRIVATE_FIELD_RO(), SENF_PARSER_CUSTOM_FIELD() + \ref SENF_PARSER_CUSTOM_FIELD() There are quite a few commands available to define fields. All these macros do the same thing: they define a field accessor plus some auxiliary symbols. The accessor will use the parser type @@ -206,8 +206,7 @@ The field defining macros come in groups which members only differ in their properties:
Standard fields:
\ref SENF_PARSER_FIELD(), \ref SENF_PARSER_FIELD_RO(), - \ref SENF_PARSER_PRIVATE_FIELD(), \ref SENF_PARSER_PRIVATE_FIELD_RO() define standard - fields.
+ \ref SENF_PARSER_PRIVATE_FIELD() define standard fields.
Arbitrary custom field:
\ref SENF_PARSER_CUSTOM_FIELD()
@@ -221,7 +220,7 @@ \par "" \ref SENF_PARSER_BITFIELD(), \ref SENF_PARSER_BITFIELD_RO(), \ref - SENF_PARSER_PRIVATE_BITFIELD(), \ref SENF_PARSER_PRIVATE_BITFIELD_RO() \n + SENF_PARSER_PRIVATE_BITFIELD()\n Bit-fields play a special role. They are quite frequent in packet definitions but don't fit into the byte offset based parsing infrastructure defined so far. Since defining the correctly @@ -279,7 +278,7 @@ \ingroup packetparser */ -///\ingroup packetparsermacros +///\addtogroup packetparsermacros ///\{ ///\name Control information @@ -354,6 +353,9 @@ SENF_PARSER_INHERIT(BaseParser) \endcode + + If you want to define collection fields which reference auxiliary fields in the base parser, + you must define the base parser as a variable parser not a fixed parser. \param[in] base name of base class \hideinitializer @@ -402,9 +404,8 @@
return_type name() const
The accessor member will return the parsed value when called. For normal fields, return_type equals type, the type of the sub parser. This allows to change the value via the returned - sub-parser. If the field is marked read-only (\ref SENF_PARSER_FIELD_RO() or \ref - SENF_PARSER_PRIVATE_FIELD_RO()), the return type will be - type::value_type.
+ sub-parser. If the field is marked read-only (\ref SENF_PARSER_FIELD_RO()), the return type + will be type::value_type.
typedef type name_t
This typedef symbol is an alias for the fields type.
@@ -420,8 +421,7 @@ \param[in] name field name \param[in] type parser type - \see \ref SENF_PARSER_FIELD_RO(), \ref SENF_PARSER_PRIVATE_FIELD(), \ref - SENF_PARSER_PRIVATE_FIELD_RO() + \see \ref SENF_PARSER_FIELD_RO(), \ref SENF_PARSER_PRIVATE_FIELD() \hideinitializer */ #define SENF_PARSER_FIELD(name, type) @@ -431,6 +431,10 @@ Define read-only parser field. Read-only fields may only be defined for \a type's which are value parsers: The parser \a type must have a \c value_type typedef member and a \c value() member, which returns the current value of the field. + + Defining such a field really defines \e two accessors: A read/write \e private field and a + read-only \e public accessor. The name of the private read/write field is given by adding a + trailing '_' to \a name. The read-only public accessor is called \a name. \see SENF_PARSER_FIELD() \hideinitializer @@ -447,18 +451,6 @@ */ #define SENF_PARSER_PRIVATE_FIELD(name, type) -/** \brief Define parser field (private + read-only) - - Define a read-only parser field which is marked as \c private and may only be accessed from the - parser class itself. Read-only fields may only be defined for \a type's which are value parsers: - The parser \a type must have a \c value_type typedef member and a \c value() member, which - returns the current value of the field. - - \see SENF_PARSER_FIELD() - \hideinitializer - */ -#define SENF_PARSER_PRIVATE_FIELD_RO(name, type) - /** \brief Define custom field accessor This macro is used to define a field using a custom access method: @@ -516,18 +508,16 @@ \param[in] bits number of bits \param[in] type bit field type, one of \c signed, \c unsigned or \c bool - \see \ref SENF_PARSER_BITFIELD_RO(), \ref SENF_PARSER_PRIVATE_BITFIELD(), \ref - SENF_PARSER_PRIVATE_BITFIELD_RO() - + \see \ref SENF_PARSER_BITFIELD_RO(), \ref SENF_PARSER_PRIVATE_BITFIELD() \hideinitializer */ #define SENF_PARSER_BITFIELD(name, bits, type) /** \brief Define bit-field (read-only) - Define read-only bit field. + Define read-only bit field. This is for bit-fields what \ref SENF_PARSER_FIELD_RO is for ordinary fields. - \see \ref SENF_PARSER_BITFIELD() + \see \ref SENF_PARSER_BITFIELD() \n \ref SENF_PARSER_FIELD_RO() \hideinitializer */ #define SENF_PARSER_BITFIELD_RO(name, bits, type) @@ -542,16 +532,6 @@ */ #define SENF_PARSER_PRIVATE_BITFIELD(name, bits, type) -/** \brief Define bit-field (private + read-only) - - Define a read-only bit field which is marked as \c private and may only be accessed from the - parser class itself. - - \see \ref SENF_PARSER_BITFIELD() - \hideinitializer - */ -#define SENF_PARSER_PRIVATE_BITFIELD_RO(name, bits, type) - ///@} ///\name Current offset @@ -685,30 +665,28 @@ #else -#define SENF_PARSER_INHERIT BOOST_PP_CAT(SENF_PARSER_INHERIT_, SENF_PARSER_TYPE) +#define SENF_PARSER_INHERIT BOOST_PP_CAT( SENF_PARSER_INHERIT_, SENF_PARSER_TYPE ) -#define SENF_PARSER_FIELD BOOST_PP_CAT(SENF_PARSER_FIELD_, SENF_PARSER_TYPE) -#define SENF_PARSER_FIELD_RO BOOST_PP_CAT(SENF_PARSER_FIELD_RO_, SENF_PARSER_TYPE) -#define SENF_PARSER_BITFIELD BOOST_PP_CAT(SENF_PARSER_BITFIELD_, SENF_PARSER_TYPE) -#define SENF_PARSER_BITFIELD_RO BOOST_PP_CAT(SENF_PARSER_BITFIELD_RO_, SENF_PARSER_TYPE) -#define SENF_PARSER_CUSTOM_FIELD BOOST_PP_CAT(SENF_PARSER_CUSTOM_FIELD_, SENF_PARSER_TYPE) +#define SENF_PARSER_FIELD BOOST_PP_CAT( SENF_PARSER_FIELD_, SENF_PARSER_TYPE ) +#define SENF_PARSER_FIELD_RO BOOST_PP_CAT( SENF_PARSER_FIELD_RO_, SENF_PARSER_TYPE ) +#define SENF_PARSER_BITFIELD BOOST_PP_CAT( SENF_PARSER_BITFIELD_, SENF_PARSER_TYPE ) +#define SENF_PARSER_BITFIELD_RO BOOST_PP_CAT( SENF_PARSER_BITFIELD_RO_, SENF_PARSER_TYPE ) +#define SENF_PARSER_CUSTOM_FIELD BOOST_PP_CAT( SENF_PARSER_CUSTOM_FIELD_, SENF_PARSER_TYPE ) -#define SENF_PARSER_PRIVATE_FIELD BOOST_PP_CAT(SENF_PARSER_P_FIELD_, SENF_PARSER_TYPE) -#define SENF_PARSER_PRIVATE_FIELD_RO BOOST_PP_CAT(SENF_PARSER_P_FIELD_RO_, SENF_PARSER_TYPE) -#define SENF_PARSER_PRIVATE_BITFIELD BOOST_PP_CAT(SENF_PARSER_P_BITFIELD_, SENF_PARSER_TYPE) -#define SENF_PARSER_PRIVATE_BITFIELD_RO BOOST_PP_CAT(SENF_PARSER_P_BITFIELD_RO_, SENF_PARSER_TYPE) +#define SENF_PARSER_PRIVATE_FIELD BOOST_PP_CAT( SENF_PARSER_P_FIELD_, SENF_PARSER_TYPE ) +#define SENF_PARSER_PRIVATE_BITFIELD BOOST_PP_CAT( SENF_PARSER_P_BITFIELD_, SENF_PARSER_TYPE ) -#define SENF_PARSER_SKIP BOOST_PP_CAT(SENF_PARSER_SKIP_, SENF_PARSER_TYPE) -#define SENF_PARSER_SKIP_BITS BOOST_PP_CAT(SENF_PARSER_SKIP_BITS_, 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_SKIP BOOST_PP_CAT( SENF_PARSER_SKIP_, SENF_PARSER_TYPE ) +#define SENF_PARSER_SKIP_BITS BOOST_PP_CAT( SENF_PARSER_SKIP_BITS_, 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_OFFSET BOOST_PP_CAT(SENF_PARSER_OFFSET_, SENF_PARSER_TYPE) -#define SENF_PARSER_FIXED_OFFSET BOOST_PP_CAT(SENF_PARSER_FIXED_OFFSET_,SENF_PARSER_TYPE) -#define SENF_PARSER_CURRENT_FIXED_OFFSET BOOST_PP_CAT(SENF_PARSER_CURRENT_FIXED_OFFSET_, SENF_PARSER_TYPE) +#define SENF_PARSER_OFFSET BOOST_PP_CAT( SENF_PARSER_OFFSET_, SENF_PARSER_TYPE ) +#define SENF_PARSER_FIXED_OFFSET BOOST_PP_CAT( SENF_PARSER_FIXED_OFFSET_, SENF_PARSER_TYPE ) +#define SENF_PARSER_CURRENT_FIXED_OFFSET BOOST_PP_CAT( SENF_PARSER_CURRENT_FIXED_OFFSET_, SENF_PARSER_TYPE ) -#define SENF_PARSER_FINALIZE BOOST_PP_CAT(SENF_PARSER_FINALIZE_, SENF_PARSER_TYPE) +#define SENF_PARSER_FINALIZE BOOST_PP_CAT( SENF_PARSER_FINALIZE_, SENF_PARSER_TYPE ) #endif @@ -716,8 +694,8 @@ ///////////////////////////////hh.e//////////////////////////////////////// #endif -#if !defined(HH_Packets__decls_) && !defined(HH_ParseHelpers_i_) -#define HH_ParseHelpers_i_ +#if !defined(HH_SENF_Packets_Packets__decls_) && !defined(HH_SENF_Packets_ParseHelpers_i_) +#define HH_SENF_Packets_ParseHelpers_i_ //#include "ParseHelpers.cci" //#include "ParseHelpers.ct" //#include "ParseHelpers.cti"