X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FParseArray.cti;h=14d99cb574308c1c95afe734cadd255c073ea8b2;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=fe585e7c7cbcaa438af9fd257d4f6412e11f73af;hpb=85ab07d100a382467a42e19d741d403a7a96c951;p=senf.git diff --git a/Packets/ParseArray.cti b/Packets/ParseArray.cti index fe585e7..14d99cb 100644 --- a/Packets/ParseArray.cti +++ b/Packets/ParseArray.cti @@ -20,7 +20,8 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Definition of inline template functions +/** \file + \brief ParseArray inline template implementation */ #include "ParseArray.ih" @@ -36,163 +37,121 @@ #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// -template -prefix_ senf::Parse_Array::Parse_Array() -{} +/////////////////////////////////////////////////////////////////////////// +// senf::Parse_Array -template -prefix_ -senf::Parse_Array::Parse_Array(Iterator const & i) - : ParserBase(i) +template +prefix_ senf::Parse_Array::Parse_Array(data_iterator i, state_type s) + : PacketParserBase(i,s,fixed_bytes) {} -template -prefix_ unsigned senf::Parse_Array::bytes() -{ - return elements*Parser::bytes(); -} - -template -prefix_ bool -senf::Parse_Array::check(Iterator const & e) - const -{ - return e-this->i() >= bytes(); -} - -template -prefix_ void senf::Parse_Array::init() - const -{ - iterator e=end(); - for (iterator i=begin(); i!=e; ++i) i->init(); -} - -/////////////////////////////////////////////////////////////////////////// +// Container interface -template -prefix_ typename senf::Parse_Array::size_type -senf::Parse_Array::size() +template +prefix_ typename senf::Parse_Array::size_type +senf::Parse_Array::size() { return elements; } -template -prefix_ typename senf::Parse_Array::iterator -senf::Parse_Array::begin() - const -{ - return iterator(this->i()); -} - -template -prefix_ typename senf::Parse_Array::iterator -senf::Parse_Array::end() - const -{ - return iterator(this->i()+bytes()); -} - -template -prefix_ typename senf::Parse_Array::range_type -senf::Parse_Array::range() +template +prefix_ typename senf::Parse_Array::iterator +senf::Parse_Array::begin() const { - return std::make_pair(begin(),end()); + return iterator(i(),state()); } -template -prefix_ typename senf::Parse_Array::iterator -senf::Parse_Array::value() +template +prefix_ typename senf::Parse_Array::iterator +senf::Parse_Array::end() const { - return begin(); + return iterator(boost::next(i(),fixed_bytes),state()); } -template -prefix_ typename senf::Parse_Array::value_type -senf::Parse_Array::operator[](difference_type i) +template +prefix_ typename senf::Parse_Array::value_type +senf::Parse_Array::operator[](difference_type i) const { + BOOST_ASSERT( i>=0 && i < difference_type(elements) ); return begin()[i]; } -template -template -prefix_ senf::Parse_Array const & -senf::Parse_Array::operator=(InputIterator const & i) -{ - copy_n(i,size(),begin()); -} - /////////////////////////////////////////////////////////////////////////// +// senf::detail::Parse_Array_iterator + +template +prefix_ senf::detail::Parse_Array_iterator::Parse_Array_iterator() + : i_() +{} + +template +prefix_ senf::detail::Parse_Array_iterator:: +Parse_Array_iterator(PacketParserBase::data_iterator const & i, PacketParserBase::state_type s) + : i_(i), s_(s) +{} -template -prefix_ Iterator senf::impl::Parse_Array_iterator::raw() +template +prefix_ ElementParser +senf::detail::Parse_Array_iterator::operator[](int i) const { - return i_; + return (*this+i).dereference(); } -template -prefix_ Parser senf::impl::Parse_Array_iterator::operator[](int i) +template +prefix_ senf::PacketParserBase::data_iterator +senf::detail::Parse_Array_iterator::raw() const { - return (*this+i).dereference(); + return i_; } -template -prefix_ senf::impl::Parse_Array_iterator::Parse_Array_iterator() - : i_() -{} +// iterator_facade interface -template -prefix_ senf::impl::Parse_Array_iterator:: -Parse_Array_iterator(Iterator const & i) - : i_(i) -{} - -template -prefix_ Parser -senf::impl::Parse_Array_iterator::dereference() +template +prefix_ ElementParser +senf::detail::Parse_Array_iterator::dereference() const { - return Parser(i_); + return ElementParser(i_,s_); } -template -prefix_ bool senf::impl::Parse_Array_iterator:: +template +prefix_ bool +senf::detail::Parse_Array_iterator:: equal(Parse_Array_iterator const & other) const { return i_==other.i_; } -template -prefix_ int senf::impl::Parse_Array_iterator:: +template +prefix_ int senf::detail::Parse_Array_iterator:: distance_to(Parse_Array_iterator const & other) const { - return (other.i_-i_)/Parser::bytes(); + return (other.i_-i_)/ElementParser::fixed_bytes; } -template -prefix_ void senf::impl::Parse_Array_iterator::increment() +template +prefix_ void senf::detail::Parse_Array_iterator::increment() { - i_ += Parser::bytes(); + i_ += ElementParser::fixed_bytes; } -template -prefix_ void senf::impl::Parse_Array_iterator::decrement() +template +prefix_ void senf::detail::Parse_Array_iterator::decrement() { - i_ -= Parser::bytes(); + i_ -= ElementParser::fixed_bytes; } -template -prefix_ void -senf::impl::Parse_Array_iterator::advance(int n) +template +prefix_ void senf::detail::Parse_Array_iterator::advance(int n) { - i_ += n*Parser::bytes(); + i_ += n*ElementParser::fixed_bytes; } #undef copy_n @@ -206,4 +165,6 @@ senf::impl::Parse_Array_iterator::advance(int n) // c-file-style: "senf" // indent-tabs-mode: nil // ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: