4 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
5 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
6 // Stefan Bund <stefan.bund@fokus.fraunhofer.de>
8 // This program is free software; you can redistribute it and/or modify
9 // it under the terms of the GNU General Public License as published by
10 // the Free Software Foundation; either version 2 of the License, or
11 // (at your option) any later version.
13 // This program is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU General Public License for more details.
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the
20 // Free Software Foundation, Inc.,
21 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #ifndef HH_ParseArray_
24 #define HH_ParseArray_ 1
26 /** \defgroup parsecollection Collection parsers
28 Collection parsers are parsers which build collections from other parsers. Examples are a vector
29 of 16bit unsigned integers or a list of lists of 32bit numbers and so on.
31 Collection parsers provide a (reduced) STL sequence like interface. It depends on the type of
32 collection parser, what kind of sequence is modelled (e.g. random access sequence, forward
33 sequence etc). Most collections will also provide a kind of container wrapper to allow extensive
34 manipulations of the collection contents. A container wrapper is initialized with the collection
35 parser and then provides a more complete sequence interface.
37 \important Parser lifetime has to be tightly checked when working with collection parsers since
38 \e every change of the collections size will invalidate \e all parsers and iterators referencing
39 the \e complete packet chain. Collection wrappers do \e not invalidate if the change is \e after
46 #include "PacketParser.hh"
48 //#include "ParseArray.mpp"
49 ///////////////////////////////hh.p////////////////////////////////////////
53 namespace detail { template <class> class Parse_Array_iterator; }
55 /** \brief Fixed size collection of fixed size elements
57 Parse_Array will parse a sequence of <em>fixed size</em> parsers. The number of array
58 elements is given by the \e elements template parameter and is fixed at compile time.
60 Each element will be parsed by \a ElementParser, which can be any <em>fixed size</em>
61 parser. The array models an STL random-access sequence with the restriction that elements
62 cannot be added or removed since the size is fixed.
64 \ingroup parsecollection
66 template <unsigned elements, class ElementParser>
67 struct Parse_Array : public PacketParserBase
69 Parse_Array(data_iterator i, state_type s);
71 static size_type const fixed_bytes = elements*ElementParser::fixed_bytes;
75 ///////////////////////////////////////////////////////////////////////////
76 // Container interface
78 typedef ElementParser value_type;
79 typedef detail::Parse_Array_iterator<value_type> iterator;
80 typedef iterator const_iterator;
82 static size_type size();
84 iterator begin() const;
87 value_type operator[](difference_type i) const;
92 ///////////////////////////////hh.e////////////////////////////////////////
94 #if !defined(SENF_PACKETS_DECL_ONLY) && !defined(HH_ParseArray_i_)
95 #define HH_ParseArray_i_
96 //#include "ParseArray.cci"
97 //#include "ParseArray.ct"
98 #include "ParseArray.cti"
105 // c-file-style: "senf"
106 // indent-tabs-mode: nil
107 // ispell-local-dictionary: "american"
108 // compile-command: "scons -u test"
109 // comment-column: 40