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 // Definition of inline template functions
25 #include "ParseArray.ih"
29 #if defined(_STLP_ALGORITHM) || (__GNUC__<4 && __GNUC_MINOR__<4)
30 #define copy_n std::copy_n
32 #include <ext/algorithm>
33 #define copy_n __gnu_cxx::copy_n
36 #define prefix_ inline
37 ///////////////////////////////cti.p///////////////////////////////////////
39 template <unsigned elements, class Parser, class Iterator, class IPacket>
40 prefix_ satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::Parse_Array()
43 template <unsigned elements, class Parser, class Iterator, class IPacket>
45 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::Parse_Array(Iterator const & i)
46 : ParserBase<Iterator,IPacket>(i)
49 template <unsigned elements, class Parser, class Iterator, class IPacket>
50 prefix_ unsigned satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::bytes()
52 return elements*Parser::bytes();
55 template <unsigned elements, class Parser, class Iterator, class IPacket>
57 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::check(Iterator const & e)
60 return e-this->i() >= bytes();
63 template <unsigned elements, class Parser, class Iterator, class IPacket>
64 prefix_ void satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::init()
68 for (iterator i=begin(); i!=e; ++i) i->init();
71 ///////////////////////////////////////////////////////////////////////////
73 template <unsigned elements, class Parser, class Iterator, class IPacket>
74 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::size_type
75 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::size()
80 template <unsigned elements, class Parser, class Iterator, class IPacket>
81 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::iterator
82 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::begin()
85 return iterator(this->i());
88 template <unsigned elements, class Parser, class Iterator, class IPacket>
89 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::iterator
90 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::end()
93 return iterator(this->i()+bytes());
96 template <unsigned elements, class Parser, class Iterator, class IPacket>
97 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::range_type
98 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::range()
101 return std::make_pair(begin(),end());
104 template <unsigned elements, class Parser, class Iterator, class IPacket>
105 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::iterator
106 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::value()
112 template <unsigned elements, class Parser, class Iterator, class IPacket>
113 prefix_ typename satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::value_type
114 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::operator[](difference_type i)
120 template <unsigned elements, class Parser, class Iterator, class IPacket>
121 template <class InputIterator>
122 prefix_ satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket> const &
123 satcom::pkf::Parse_Array<elements,Parser,Iterator,IPacket>::operator=(InputIterator const & i)
125 copy_n(i,size(),begin());
128 ///////////////////////////////////////////////////////////////////////////
130 template <class Parser, class Iterator>
131 prefix_ Iterator satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::raw()
137 template <class Parser, class Iterator>
138 prefix_ Parser satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::operator[](int i)
141 return (*this+i).dereference();
144 template <class Parser, class Iterator>
145 prefix_ satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::Parse_Array_iterator()
149 template <class Parser, class Iterator>
150 prefix_ satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::
151 Parse_Array_iterator(Iterator const & i)
155 template <class Parser, class Iterator>
157 satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::dereference()
163 template <class Parser, class Iterator>
164 prefix_ bool satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::
165 equal(Parse_Array_iterator const & other)
171 template <class Parser, class Iterator>
172 prefix_ int satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::
173 distance_to(Parse_Array_iterator const & other)
176 return (other.i_-i_)/Parser::bytes();
179 template <class Parser, class Iterator>
180 prefix_ void satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::increment()
182 i_ += Parser::bytes();
185 template <class Parser, class Iterator>
186 prefix_ void satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::decrement()
188 i_ -= Parser::bytes();
191 template <class Parser, class Iterator>
193 satcom::pkf::impl::Parse_Array_iterator<Parser,Iterator>::advance(int n)
195 i_ += n*Parser::bytes();
199 ///////////////////////////////cti.e///////////////////////////////////////
205 // c-file-style: "satcom"