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.
24 \brief ParseArray inline template implementation */
26 #include "ParseArray.ih"
30 #define prefix_ inline
31 ///////////////////////////////cti.p///////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////////////
34 // senf::Parse_Array<elements,ElementParser>
36 template <unsigned elements, class ElementParser>
37 prefix_ senf::Parse_Array<elements,ElementParser>::Parse_Array(data_iterator i, state_type s)
38 : PacketParserBase(i,s,fixed_bytes)
41 // Container interface
43 template <unsigned elements, class ElementParser>
44 prefix_ typename senf::Parse_Array<elements,ElementParser>::size_type
45 senf::Parse_Array<elements,ElementParser>::size()
50 template <unsigned elements, class ElementParser>
51 prefix_ typename senf::Parse_Array<elements,ElementParser>::iterator
52 senf::Parse_Array<elements,ElementParser>::begin()
55 return iterator(i(),state());
58 template <unsigned elements, class ElementParser>
59 prefix_ typename senf::Parse_Array<elements,ElementParser>::iterator
60 senf::Parse_Array<elements,ElementParser>::end()
63 return iterator(boost::next(i(),fixed_bytes),state());
66 template <unsigned elements, class ElementParser>
67 prefix_ typename senf::Parse_Array<elements,ElementParser>::value_type
68 senf::Parse_Array<elements,ElementParser>::operator[](difference_type i)
71 BOOST_ASSERT( i>=0 && i < difference_type(elements) );
75 ///////////////////////////////////////////////////////////////////////////
76 // senf::detail::Parse_Array_iterator<ElementParser>
78 template <class ElementParser>
79 prefix_ senf::detail::Parse_Array_iterator<ElementParser>::Parse_Array_iterator()
83 template <class ElementParser>
84 prefix_ senf::detail::Parse_Array_iterator<ElementParser>::
85 Parse_Array_iterator(PacketParserBase::data_iterator const & i, PacketParserBase::state_type s)
89 template <class ElementParser>
91 senf::detail::Parse_Array_iterator<ElementParser>::operator[](int i)
94 return (*this+i).dereference();
97 template <class ElementParser>
98 prefix_ senf::PacketParserBase::data_iterator
99 senf::detail::Parse_Array_iterator<ElementParser>::raw()
105 // iterator_facade interface
107 template <class ElementParser>
108 prefix_ ElementParser
109 senf::detail::Parse_Array_iterator<ElementParser>::dereference()
112 return ElementParser(i_,s_);
115 template <class ElementParser>
117 senf::detail::Parse_Array_iterator<ElementParser>::
118 equal(Parse_Array_iterator const & other)
124 template <class ElementParser>
125 prefix_ int senf::detail::Parse_Array_iterator<ElementParser>::
126 distance_to(Parse_Array_iterator const & other)
129 return (other.i_-i_)/ElementParser::fixed_bytes;
132 template <class ElementParser>
133 prefix_ void senf::detail::Parse_Array_iterator<ElementParser>::increment()
135 i_ += ElementParser::fixed_bytes;
138 template <class ElementParser>
139 prefix_ void senf::detail::Parse_Array_iterator<ElementParser>::decrement()
141 i_ -= ElementParser::fixed_bytes;
144 template <class ElementParser>
145 prefix_ void senf::detail::Parse_Array_iterator<ElementParser>::advance(int n)
147 i_ += n*ElementParser::fixed_bytes;
150 ///////////////////////////////cti.e///////////////////////////////////////
157 // c-file-style: "senf"
158 // indent-tabs-mode: nil
159 // ispell-local-dictionary: "american"
160 // compile-command: "scons -u test"
161 // comment-column: 40