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 "ParseVec.ih"
29 #define prefix_ inline
30 ///////////////////////////////cti.p///////////////////////////////////////
32 template <class Parser, class SizeParser, class Iterator, class IPacket>
33 prefix_ senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::
34 Parse_Vector(SizeParser const & size)
38 template <class Parser, class SizeParser, class Iterator, class IPacket>
39 prefix_ senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::
40 Parse_Vector(size_parser const & size, Iterator const & i)
41 : ParserBase<Iterator,IPacket>(i), size_(size)
44 template <class Parser, class SizeParser, class Iterator, class IPacket>
45 prefix_ unsigned senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::bytes()
48 return Parser::bytes()*size();
51 template <class Parser, class SizeParser, class Iterator, class IPacket>
53 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::check(Iterator const & e)
56 return e-this->i() >= bytes();
59 template <class Parser, class SizeParser, class Iterator, class IPacket>
60 prefix_ void senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::init()
64 for (iterator i (begin()); i!=e; ++i) i->init();
67 ///////////////////////////////////////////////////////////////////////////
69 template <class Parser, class SizeParser, class Iterator, class IPacket>
70 prefix_ typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::size_type
71 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::size()
77 template <class Parser, class SizeParser, class Iterator, class IPacket>
78 prefix_ bool senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::empty()
84 template <class Parser, class SizeParser, class Iterator, class IPacket>
86 typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::iterator
87 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::begin()
90 return iterator(this->i());
93 template <class Parser, class SizeParser, class Iterator, class IPacket>
95 typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::iterator
96 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::end()
99 return iterator(this->i()+bytes());
102 template <class Parser, class SizeParser, class Iterator, class IPacket>
104 typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::range_type
105 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::range()
108 return std::make_pair(begin(),end());
111 template <class Parser, class SizeParser, class Iterator, class IPacket>
113 typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::range_type
114 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::value()
120 template <class Parser, class SizeParser, class Iterator, class IPacket>
122 typename senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::value_type
123 senf::Parse_Vector<Parser,SizeParser,Iterator,IPacket>::operator[](difference_type i)
129 ///////////////////////////////////////////////////////////////////////////
130 // senf::Parse_Vector_wrapper<Parser,SizeParser,Container>
132 template <class Parser, class SizeParser, class Container>
133 template <class P, class SP, class I, class IP>
134 prefix_ senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::
135 Parse_Vector_wrapper(Parse_Vector<P,SP,I,IP> const & vector, Container & container)
136 : i_(vector.i()-container.begin()), size_i_(vector.size_.i()-container.begin()),
137 container_(container)
140 template <class Parser, class SizeParser, class Container>
141 prefix_ typename senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::size_type
142 senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::size()
145 return SizeParser(container_.begin()+size_i_).value();
148 template <class Parser, class SizeParser, class Container>
149 prefix_ bool senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::empty()
155 template <class Parser, class SizeParser, class Container>
156 prefix_ typename senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::iterator
157 senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::begin()
160 return iterator(container_.begin() + i_);
163 template <class Parser, class SizeParser, class Container>
164 prefix_ typename senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::iterator
165 senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::end()
168 return iterator(container_.begin() + i_ + Parser::bytes()*size());
171 template <class Parser, class SizeParser, class Container>
172 prefix_ typename senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::range_type
173 senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::range()
176 return std::make_pair(begin(), end());
179 template <class Parser, class SizeParser, class Container>
180 prefix_ typename senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::value_type
181 senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::operator[](difference_type i)
187 template <class Parser, class SizeParser, class Container>
188 prefix_ void senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::shift(iterator pos,
191 container_.insert(pos.raw(),n*Parser::bytes(),0);
192 SizeParser(container_.begin()+size_i_) += n;
195 template <class Parser, class SizeParser, class Container>
196 prefix_ void senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::erase(iterator pos,
199 container_.erase(pos.raw(),pos.raw()+n*Parser::bytes());
200 SizeParser(container_.begin()+size_i_) -= n;
203 template <class Parser, class SizeParser, class Container>
204 prefix_ void senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::erase(iterator f,
210 template <class Parser, class SizeParser, class Container>
211 prefix_ void senf::Parse_Vector_wrapper<Parser,SizeParser,Container>::clear()
213 container_.erase(container_.begin()+i_,container_.begin()+i_+size()*Parser::bytes());
214 SizeParser(container_.begin()+size_i_) = 0;
217 ///////////////////////////////cti.e///////////////////////////////////////
224 // c-file-style: "senf"
225 // indent-tabs-mode: nil
226 // ispell-local-dictionary: "american"