X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListNParser.cti;h=ca46454bb5ea89b9a52ba593f73b2f68d0006195;hb=f2f5d59e83863f3b513950173baee1b6da2aee3c;hp=e77af352e4c89eab9f72a763521bd6b0ad36585b;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Packets/ListNParser.cti b/Packets/ListNParser.cti index e77af35..ca46454 100644 --- a/Packets/ListNParser.cti +++ b/Packets/ListNParser.cti @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Copyright (C) 2007 +// 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 @@ -30,86 +30,96 @@ #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// -template -prefix_ typename senf::detail::ListNParser_Policy::size_type -senf::detail::ListNParser_Policy::bytes(iterator i, state_type s) +template +prefix_ senf::detail::ListNParser_Policy::ListNParser_Policy() +{} + +template +template +prefix_ +senf::detail::ListNParser_Policy::ListNParser_Policy(Arg const & aux) + : AuxPolicy (aux) +{} + +template +prefix_ typename senf::detail::ListNParser_Policy::size_type +senf::detail::ListNParser_Policy::bytes(data_iterator i, state_type s) const { - return std::distance(i,parser_type(i,s).end().raw()); + container_type c (parser_type(*this, i, s)); + return std::distance(i,c.end().raw()); } -template -prefix_ typename senf::detail::ListNParser_Policy::size_type -senf::detail::ListNParser_Policy::size(iterator i, state_type s) +template +prefix_ typename senf::detail::ListNParser_Policy::size_type +senf::detail::ListNParser_Policy::size(data_iterator i, state_type s) const { - return SizeParser(i,s); + return AuxPolicy::aux(i,s); } -template -prefix_ void senf::detail::ListNParser_Policy::init(iterator i, - state_type s) +template +prefix_ void senf::detail::ListNParser_Policy::init(data_iterator i, + state_type s) const -{} +{ + AuxPolicy::aux(0,i,s); +} -template -prefix_ void senf::detail::ListNParser_Policy::erase(iterator i, - state_type s, - iterator p) +template +prefix_ void +senf::detail::ListNParser_Policy::erase(container_type & c, + data_iterator p) const { - --SizeParser(i,s); + this->aux(this->aux(c.i(),c.state())-1,c.i(),c.state()); } -template -prefix_ void senf::detail::ListNParser_Policy::insert(iterator i, - state_type s, - iterator p) +template +prefix_ void +senf::detail::ListNParser_Policy::insert(container_type & c, + data_iterator p) const { - ++SizeParser(i,s); + this->aux(this->aux(c.i(),c.state())+1,c.i(),c.state()); } -template -prefix_ void senf::detail::ListNParser_Policy::update(iterator i, - state_type s) +template +prefix_ void +senf::detail::ListNParser_Policy::update(container_type const & c) const {} -template -prefix_ typename senf::detail::ListNParser_Policy::iterator -senf::detail::ListNParser_Policy::iterator_policy:: -setBegin(iterator i, state_type s) -{ - l_ = i; - n_ = SizeParser(i,s); - return n_ ? boost::next(i,SizeParser::fixed_bytes) : data(s).end(); -} - -template -prefix_ typename senf::detail::ListNParser_Policy::iterator -senf::detail::ListNParser_Policy::iterator_policy:: -setEnd(iterator i, state_type s) +template +prefix_ typename senf::detail::ListNParser_Policy::data_iterator +senf::detail::ListNParser_Policy::setBegin(container_type const & c, + iterator_data & d) + const { - l_ = i; - n_ = 0; - return data(s).end(); + d.n_ = this->aux(c.i(),c.state()); + return d.n_ ? this->adjust(c.i(),c.state()) : c.data().end(); } -template -prefix_ typename senf::detail::ListNParser_Policy::iterator -senf::detail::ListNParser_Policy::iterator_policy::next(iterator i, - state_type s) +template +prefix_ typename senf::detail::ListNParser_Policy::data_iterator +senf::detail::ListNParser_Policy::setEnd(container_type const & c, + iterator_data & d) + const { - --n_; - return n_ ? boost::next(i,senf::bytes(ElementParser(i,s))) : data(s).end(); + d.n_ = 0; + return c.data().end(); } -template -prefix_ senf::PacketData & -senf::detail::ListNParser_Policy::data(state_type s) +template +prefix_ typename senf::detail::ListNParser_Policy::data_iterator +senf::detail::ListNParser_Policy::next(container_type const & c, + iterator_data & d) + const { - return *s; + --d.n_; + return d.n_ ? boost::next( container_type::iterator::get(d).i(), + senf::bytes(* container_type::iterator::get(d)) ) + : c.data().end(); } ///////////////////////////////cti.e///////////////////////////////////////