// $Id$ // // Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // Definition of inline template functions //#include "ParseVec.ih" // Custom includes #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// template prefix_ senf::Parse_Vector:: Parse_Vector(SizeParser const & size) : size_(size) {} template prefix_ senf::Parse_Vector:: Parse_Vector(size_parser const & size, Iterator const & i) : ParserBase(i), size_(size) {} template prefix_ unsigned senf::Parse_Vector::bytes() const { return Parser::bytes()*size(); } template prefix_ void senf::Parse_Vector::check(Iterator const & e) const { return e-this->i() >= bytes(); } template prefix_ void senf::Parse_Vector::init() const { iterator e (end()); for (iterator i (begin()); i!=e; ++i) i->init(); } /////////////////////////////////////////////////////////////////////////// template prefix_ typename senf::Parse_Vector::size_type senf::Parse_Vector::size() const { return size_.value(); } template prefix_ bool senf::Parse_Vector::empty() const { return size()==0; } template prefix_ typename senf::Parse_Vector::iterator senf::Parse_Vector::begin() const { return iterator(this->i()); } template prefix_ typename senf::Parse_Vector::iterator senf::Parse_Vector::end() const { return iterator(this->i()+bytes()); } template prefix_ typename senf::Parse_Vector::range_type senf::Parse_Vector::range() const { return std::make_pair(begin(),end()); } template prefix_ typename senf::Parse_Vector::range_type senf::Parse_Vector::value() const { return range(); } template prefix_ typename senf::Parse_Vector::value_type senf::Parse_Vector::operator[](difference_type i) const { return begin()[i]; } /////////////////////////////////////////////////////////////////////////// // senf::Parse_Vector_wrapper template template prefix_ senf::Parse_Vector_wrapper:: Parse_Vector_wrapper(Parse_Vector const & vector, Container & container) : i_(vector.i()-container.begin()), size_i_(vector.size_.i()-container.begin()), container_(container) {} template prefix_ typename senf::Parse_Vector_wrapper::size_type senf::Parse_Vector_wrapper::size() const { return SizeParser(container_.begin()+size_i_).value(); } template prefix_ bool senf::Parse_Vector_wrapper::empty() const { return size() == 0; } template prefix_ typename senf::Parse_Vector_wrapper::iterator senf::Parse_Vector_wrapper::begin() const { return iterator(container_.begin() + i_); } template prefix_ typename senf::Parse_Vector_wrapper::iterator senf::Parse_Vector_wrapper::end() const { return iterator(container_.begin() + i_ + Parser::bytes()*size()); } template prefix_ typename senf::Parse_Vector_wrapper::range_type senf::Parse_Vector_wrapper::range() const { return std::make_pair(begin(), end()); } template prefix_ typename senf::Parse_Vector_wrapper::value_type senf::Parse_Vector_wrapper::operator[](difference_type i) const { return begin()[i]; } template prefix_ void senf::Parse_Vector_wrapper::shift(iterator pos, size_type n) { container_.insert(pos.raw(),n*Parser::bytes(),0); SizeParser(container_.begin()+size_i_) += n; } template prefix_ void senf::Parse_Vector_wrapper::erase(iterator pos, size_type n) { container_.erase(pos.raw(),pos.raw()+n*Parser::bytes()); SizeParser(container_.begin()+size_i_) -= n; } template prefix_ void senf::Parse_Vector_wrapper::erase(iterator f, iterator l) { erase(f,l-f); } template prefix_ void senf::Parse_Vector_wrapper::clear() { container_.erase(container_.begin()+i_,container_.begin()+i_+size()*Parser::bytes()); SizeParser(container_.begin()+size_i_) = 0; } ///////////////////////////////cti.e/////////////////////////////////////// #undef prefix_ // Local Variables: // mode: c++ // fill-column: 100 // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" // End: