#ifndef HH_ParseArray_
#define HH_ParseArray_ 1
+/** \defgroup parsecollection Collection parsers
+
+ Collection parsers are parsers which build collections from other parsers. Examples are a vector
+ of 16bit unsigned integers or a list of lists of 32bit numbers and so on.
+
+ Collection parsers provide a (reduced) STL sequence like interface. It depends on the type of
+ collection parser, what kind of sequence is modelled (e.g. random access sequence, forward
+ sequence etc). Most collections will also provide a kind of container wrapper to allow extensive
+ manipulations of the collection contents. A container wrapper is initialized with the collection
+ parser and then provides a more complete sequence interface.
+
+ \important Parser lifetime has to be tightly checked when working with collection parsers since
+ \e every change of the collections size will invalidate \e all parsers and iterators referencing
+ the \e complete packet chain. Collection wrappers do \e not invalidate if the change is \e after
+ the collection.
+
+ \ingroup packetparser
+*/
+
// Custom includes
#include "PacketParser.hh"
namespace detail { template <class> class Parse_Array_iterator; }
- /* Parse_Array has the external interface of a container class
+ /** \brief Fixed size collection of fixed size elements
+
+ Parse_Array will parse a sequence of <em>fixed size</em> parsers. The number of array
+ elements is given by the \e elements template parameter and is fixed at compile time.
+
+ Each element will be parsed by \a ElementParser, which can be any <em>fixed size</em>
+ parser. The array models an STL random-access sequence with the restriction that elements
+ cannot be added or removed since the size is fixed.
+
+ \ingroup parsecollection
*/
template <unsigned elements, class ElementParser>
struct Parse_Array : public PacketParserBase