senfscons: Much improved install implementation
[senf.git] / Packets / ParseArray.hh
index f0669b3..5260201 100644 (file)
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
+/** \file
+    \brief ParseArray public header */
+
 #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. Additionally, the collection
+    wrapper has a longer lifetime than an ordinary parser: While a parser will be invalidated
+    whenever the collection is changed, the container wrapper will stay valid as long as the
+    collection is changed through the wrapper (directly or indirectly, where indirectly means that a
+    sub-field or sub-collection of the collection is changed). Some collections may provide even
+    more lifetime guarantees but this guarantee should be met by all collection wrappers.
+
+    \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"
 
@@ -33,7 +60,16 @@ namespace senf {
 
     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
@@ -66,7 +102,7 @@ namespace senf {
 #if !defined(SENF_PACKETS_DECL_ONLY) && !defined(HH_ParseArray_i_)
 #define HH_ParseArray_i_
 //#include "ParseArray.cci"
-//#include "ParseArray.ct"
+#include "ParseArray.ct"
 #include "ParseArray.cti"
 #endif