You will normally not instantiate ListParser directly, you will use the \ref
SENF_PARSER_LIST() helper macro.
- \see ExampleListPolicy
+ Some basic list access methods are defined as parser members. To access the complete list
+ API however you will need to instantiate a container wrapper for the list. See \ref
+ packet_usage_fields_collection.
+
+ \see
+ \ref How to access \ref packet_usage_fields_collection
+ SENF_PARSER_LIST() macro used to define list fields \n
+ ListParser_Container list container wrapper API \n
+ ExampleListPolicy
+
\ingroup parsecollection
*/
template <class ListPolicy>
// The size field should be declared private or read-only (size is accessible via the list)
SENF_PARSER_PRIVATE_FIELD ( list_size_, senf::UInt16Parser );
// Define the list
- SENF_PARSER_VECTOR ( list, list_size_, EltParser );
+ SENF_PARSER_LIST ( list, list_size_, EltParser );
\endcode
Here \c EltParser can be an arbitrary parser and need not have a fixed size.
<tr><td>\c bytes(\a size)</td><td>\a size gives the size of the list in bytes not the
number of contained elements</td></tr>
+ <tr><td>\c packetSize()</td><td>Use the size of the packet to get the list size. The
+ list will occupy all space up to the end of the packet.</td></tr>
+
<tr><td>\c transform(\a transform, \a size)</td><td>The \a transform is applied to the \a
size value, the value is not used directly</td>
The tags are applied to the \a size parameter:
\code
- SENF_PARSER_LIST ( vec, transform(MyTransform, list_size_), EltParser );
+ SENF_PARSER_LIST ( list, transform(MyTransform, list_size_), EltParser );
\endcode
\warning There are some caveats when working with \c bytes() type lists:
\param[in] size name of field giving the list size
\param[in] elt_type list element type
+ \see
+ How to use \ref packet_usage_fields_collection \n
+ senf::ListParser the list parser API for list field access
+ senf::ListParser_Container the list parser container API for list field access
+
\hideinitializer
\ingroup packetparsermacros
*/