X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FVectorParser.cti;h=adcaec1a0ede14ad88cf5033f7e21d1e2a2b3c3f;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=428dd3596a2c318bc00942f0d79fd17755cb0d8c;hpb=a1001797645cc68c869ef296f5e9ba13aa8e80c4;p=senf.git diff --git a/Packets/VectorParser.cti b/Packets/VectorParser.cti index 428dd35..adcaec1 100644 --- a/Packets/VectorParser.cti +++ b/Packets/VectorParser.cti @@ -1,9 +1,9 @@ // $Id$ // // Copyright (C) 2006 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY +// 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 @@ -33,77 +33,77 @@ /////////////////////////////////////////////////////////////////////////// // senf::VectorParser -template -prefix_ senf::VectorParser::VectorParser(data_iterator i, state_type s) - : PacketParserBase(i,s), sizer_() +template +prefix_ senf::VectorParser::VectorParser(data_iterator i, state_type s) + : PacketParserBase(i,s), AuxPolicy() {} -template -prefix_ senf::VectorParser::VectorParser(Sizer sizer, data_iterator i, - state_type s) - : PacketParserBase(i,s), sizer_(sizer) +template +prefix_ senf::VectorParser::VectorParser(AuxPolicy policy, + data_iterator i, state_type s) + : PacketParserBase(i,s), AuxPolicy(policy) {} -template -prefix_ typename senf::VectorParser::size_type -senf::VectorParser::bytes() +template +prefix_ typename senf::VectorParser::size_type +senf::VectorParser::bytes() const { - return size()*ElementParser::fixed_bytes + sizer_.bytes(i(),state()); + return size()*ElementParser::fixed_bytes + AuxPolicy::aux_bytes; } // Container interface -template -prefix_ typename senf::VectorParser::size_type -senf::VectorParser::size() +template +prefix_ typename senf::VectorParser::size_type +senf::VectorParser::size() const { - return sizer_.size(i(),state()); + return aux(i(),state()); } -template -prefix_ bool senf::VectorParser::empty() +template +prefix_ bool senf::VectorParser::empty() const { return size()==0; } -template -prefix_ typename senf::VectorParser::iterator -senf::VectorParser::begin() +template +prefix_ typename senf::VectorParser::iterator +senf::VectorParser::begin() const { - return iterator(sizer_.begin(i(),state()),state()); + return iterator(adjust(i(),state()),state()); } -template -prefix_ typename senf::VectorParser::iterator -senf::VectorParser::end() +template +prefix_ typename senf::VectorParser::iterator +senf::VectorParser::end() const { return boost::next(begin(),size()); } -template -prefix_ typename senf::VectorParser::value_type -senf::VectorParser::operator[](difference_type i) +template +prefix_ typename senf::VectorParser::value_type +senf::VectorParser::operator[](difference_type i) const { return begin()[i]; } -template -prefix_ typename senf::VectorParser::value_type -senf::VectorParser::front() +template +prefix_ typename senf::VectorParser::value_type +senf::VectorParser::front() const { return begin()[0]; } -template -prefix_ typename senf::VectorParser::value_type -senf::VectorParser::back() +template +prefix_ typename senf::VectorParser::value_type +senf::VectorParser::back() const { return begin()[size()-1]; @@ -111,51 +111,51 @@ senf::VectorParser::back() // Mutators -template +template template -prefix_ void senf::VectorParser::push_back(Value value, size_type n) +prefix_ void senf::VectorParser::push_back(Value value, size_type n) const { container c (*this); c.push_back(value,n); } -template -prefix_ void senf::VectorParser::push_back_space(size_type n) +template +prefix_ void senf::VectorParser::push_back_space(size_type n) const { container c (*this); c.push_back_space(n); } -template +template template -prefix_ void senf::VectorParser::push_front(Value value, size_type n) +prefix_ void senf::VectorParser::push_front(Value value, size_type n) const { container c (*this); c.push_front(value,n); } -template -prefix_ void senf::VectorParser::push_front_space(size_type n) +template +prefix_ void senf::VectorParser::push_front_space(size_type n) const { container c (*this); c.push_front_space(n); } -template -prefix_ void senf::VectorParser::resize(size_type n) +template +prefix_ void senf::VectorParser::resize(size_type n) const { container c (*this); c.resize(n); } -template +template template -prefix_ void senf::VectorParser::resize(size_type n, Value value) +prefix_ void senf::VectorParser::resize(size_type n, Value value) const { container c (*this); @@ -163,48 +163,6 @@ prefix_ void senf::VectorParser::resize(size_type n, Value } /////////////////////////////////////////////////////////////////////////// -// senf::SimpleSizeParser - -template -prefix_ typename senf::detail::VectorNParser_Sizer::size_type -senf::detail::VectorNParser_Sizer::size(iterator i, state_type s) - const -{ - return SizeParser(boost::prior(i, Distance), s).value(); -} - -template -prefix_ void senf::detail::VectorNParser_Sizer::size(iterator i, - state_type s, - size_type v) - const -{ - SizeParser(boost::prior(i, Distance), s).value(v); -} - -template -prefix_ typename senf::detail::VectorNParser_Sizer::iterator -senf::detail::VectorNParser_Sizer::begin(iterator i, state_type s) - const -{ - return i; -} - -template -prefix_ typename senf::detail::VectorNParser_Sizer::size_type -senf::detail::VectorNParser_Sizer::bytes(iterator i, state_type s) - const -{ - return 0; -} - -template -prefix_ void senf::detail::VectorNParser_Sizer::init(iterator i, - state_type s) - const -{} - -/////////////////////////////////////////////////////////////////////////// // senf::VectorParser_wrapper // structors and default members @@ -212,65 +170,65 @@ prefix_ void senf::detail::VectorNParser_Sizer::init(iterat // hm ... be careful here ! the data() member is called in an incompletely intitialized // instance. However, data() only depends on state_ which is initialized before the call. YOU MUST // NOT CHANGE THE ORDERING OF THE DATA MEMBERS -template -prefix_ senf::VectorParser_Container:: +template +prefix_ senf::VectorParser_Container:: VectorParser_Container(parser_type const & vector) - : sizer_ (vector.sizer_), state_ (vector.state()), + : AuxPolicy::WrapperPolicy(static_cast(vector)), state_ (vector.state()), i_ (std::distance(data().begin(),vector.i())) {} // accessors -template -prefix_ typename senf::VectorParser_Container::size_type -senf::VectorParser_Container::size() +template +prefix_ typename senf::VectorParser_Container::size_type +senf::VectorParser_Container::size() const { - return sizer_.size(i(),state()); + return aux(i(),state()); } -template -prefix_ bool senf::VectorParser_Container::empty() +template +prefix_ bool senf::VectorParser_Container::empty() const { return size() == 0; } -template -prefix_ typename senf::VectorParser_Container::iterator -senf::VectorParser_Container::begin() +template +prefix_ typename senf::VectorParser_Container::iterator +senf::VectorParser_Container::begin() const { - return iterator(sizer_.begin(i(),state()),state()); + return iterator(adjust(i(),state()),state()); } -template -prefix_ typename senf::VectorParser_Container::iterator -senf::VectorParser_Container::end() +template +prefix_ typename senf::VectorParser_Container::iterator +senf::VectorParser_Container::end() const { return boost::next(begin(),size()); } -template -prefix_ typename senf::VectorParser_Container::value_type -senf::VectorParser_Container::operator[](difference_type i) +template +prefix_ typename senf::VectorParser_Container::value_type +senf::VectorParser_Container::operator[](difference_type i) const { return begin()[i]; } -template -prefix_ typename senf::VectorParser_Container::value_type -senf::VectorParser_Container::front() +template +prefix_ typename senf::VectorParser_Container::value_type +senf::VectorParser_Container::front() const { return begin()[0]; } -template -prefix_ typename senf::VectorParser_Container::value_type -senf::VectorParser_Container::back() +template +prefix_ typename senf::VectorParser_Container::value_type +senf::VectorParser_Container::back() const { return begin()[size()-1]; @@ -278,109 +236,109 @@ senf::VectorParser_Container::back() // Mutators -template +template template -prefix_ void senf::VectorParser_Container::insert(iterator pos, +prefix_ void senf::VectorParser_Container::insert(iterator pos, Value const & t) { *shift(pos) << t; } -template -prefix_ void senf::VectorParser_Container::erase(iterator pos, size_type n) +template +prefix_ void senf::VectorParser_Container::erase(iterator pos, size_type n) { data().erase(pos.raw(),boost::next(pos.raw(),n*ElementParser::fixed_bytes)); setSize(size()-n); } -template -prefix_ void senf::VectorParser_Container::erase(iterator f, iterator l) +template +prefix_ void senf::VectorParser_Container::erase(iterator f, iterator l) { erase(f,std::distance(f,l)); } -template -prefix_ void senf::VectorParser_Container::clear() +template +prefix_ void senf::VectorParser_Container::clear() { erase(begin(),end()); } -template +template template -prefix_ void senf::VectorParser_Container::push_back(Value value, +prefix_ void senf::VectorParser_Container::push_back(Value value, size_type n) { insert(end(),n,value); } -template -prefix_ void senf::VectorParser_Container::push_back_space(size_type n) +template +prefix_ void senf::VectorParser_Container::push_back_space(size_type n) { shift(end(),n); } -template +template template -prefix_ void senf::VectorParser_Container::push_front(Value value, +prefix_ void senf::VectorParser_Container::push_front(Value value, size_type n) { insert(begin(),n,value); } -template -prefix_ void senf::VectorParser_Container::push_front_space(size_type n) +template +prefix_ void senf::VectorParser_Container::push_front_space(size_type n) { shift(begin(),n); } // Parser interface -template -prefix_ typename senf::VectorParser_Container::parser_type -senf::VectorParser_Container::parser() +template +prefix_ typename senf::VectorParser_Container::parser_type +senf::VectorParser_Container::parser() const { return parser_type(i(),state()); } -template -prefix_ typename senf::VectorParser_Container::data_iterator -senf::VectorParser_Container::i() +template +prefix_ typename senf::VectorParser_Container::data_iterator +senf::VectorParser_Container::i() const { return boost::next(data().begin(),i_); } -template -prefix_ typename senf::VectorParser_Container::state_type -senf::VectorParser_Container::state() +template +prefix_ typename senf::VectorParser_Container::state_type +senf::VectorParser_Container::state() const { return state_; } -template +template prefix_ senf::PacketData & -senf::VectorParser_Container::data() +senf::VectorParser_Container::data() const { return *state_; } -template -prefix_ typename senf::VectorParser_Container::size_type -senf::VectorParser_Container::bytes() +template +prefix_ typename senf::VectorParser_Container::size_type +senf::VectorParser_Container::bytes() const { - return size()*ElementParser::fixed_bytes + sizer_.bytes(i(),state()); + return size()*ElementParser::fixed_bytes + AuxPolicy::aux_bytes; } // private members -template -prefix_ void senf::VectorParser_Container::setSize(size_type value) +template +prefix_ void senf::VectorParser_Container::setSize(size_type value) { - sizer_.size(i(),state(),value); + aux(value, i(),state()); } /////////////////////////////cti.e///////////////////////////////////////