X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseArray.hh;h=2914c86577e9bb36e117be6910476020072e9027;hb=1cf24483a4b520177bfa539d9601749be6aef2ce;hp=267cb7b9c3872d85a80f9b5811c7279ba4cc9791;hpb=ac6a813d9d99f7add4e13aff7a4bcd314d5604a6;p=senf.git diff --git a/Packets/ParseArray.hh b/Packets/ParseArray.hh index 267cb7b..2914c86 100644 --- a/Packets/ParseArray.hh +++ b/Packets/ParseArray.hh @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -23,62 +23,76 @@ #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 // for std::pair -#include "ParserBase.hh" +#include "PacketParser.hh" //#include "ParseArray.mpp" ///////////////////////////////hh.p//////////////////////////////////////// namespace senf { - - namespace impl { template class Parse_Array_iterator; } + namespace detail { template class Parse_Array_iterator; } + + /** \brief Fixed size collection of fixed size elements - /* Parse_Array has the external interface of a container class + Parse_Array will parse a sequence of fixed size 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 fixed size + 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 - struct Parse_Array : public ParserBase + template + struct Parse_Array : public PacketParserBase { - /////////////////////////////////////////////////////////////////////////// - // Parser interface + Parse_Array(data_iterator i, state_type s); - template - struct rebind { typedef Parse_Array parser; }; - typedef Iterator byte_iterator; + static size_type const fixed_bytes = elements*ElementParser::fixed_bytes; - Parse_Array(); - explicit Parse_Array(Iterator const & i); - - static unsigned bytes(); - bool check(Iterator const & e) const; void init() const; /////////////////////////////////////////////////////////////////////////// // Container interface - typedef typename Parser::template rebind::parser value_type; - typedef impl::Parse_Array_iterator iterator; - typedef unsigned size_type; - typedef int difference_type; - typedef std::pair range_type; + typedef ElementParser value_type; + typedef detail::Parse_Array_iterator iterator; + typedef iterator const_iterator; static size_type size(); iterator begin() const; iterator end() const; - range_type range() const; - iterator value() const; value_type operator[](difference_type i) const; - - template - Parse_Array const & operator= (InputIterator const & i); }; } ///////////////////////////////hh.e//////////////////////////////////////// +#endif +#if !defined(SENF_PACKETS_DECL_ONLY) && !defined(HH_ParseArray_i_) +#define HH_ParseArray_i_ //#include "ParseArray.cci" //#include "ParseArray.ct" #include "ParseArray.cti" @@ -87,5 +101,10 @@ namespace senf { // Local Variables: // mode: c++ +// fill-column: 100 // c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: