X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListParser.cti;h=9847a658ab417eb234adf43baa843b2a308a964b;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=919b913b82ec4b63bfd405c27be8ff27064ba23f;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Packets/ListParser.cti b/Packets/ListParser.cti index 919b913..9847a65 100644 --- a/Packets/ListParser.cti +++ b/Packets/ListParser.cti @@ -68,23 +68,8 @@ template prefix_ bool senf::ListParser::empty() const { - return begin() == end(); -} - -template -prefix_ typename senf::ListParser::iterator -senf::ListParser::begin() - const -{ - return iterator(i(),state(),iterator::Begin); -} - -template -prefix_ typename senf::ListParser::iterator -senf::ListParser::end() - const -{ - return iterator(i(),state(),iterator::End); + container c (*this); + return c.empty(); } template @@ -93,7 +78,8 @@ senf::ListParser::front() const { SENF_ASSERT( ! empty() ); - return *begin(); + container c(*this); + return *(c.begin()); } template @@ -147,62 +133,83 @@ prefix_ void senf::ListParser::resize(size_type n, Value value) c.resize(n,value); } +template +prefix_ typename senf::ListParser & +senf::ListParser::get(ListPolicy & p) +{ + return static_cast(p); +} + +template +prefix_ typename senf::ListParser const & +senf::ListParser::get(ListPolicy const & p) +{ + return static_cast(p); +} + /////////////////////////////////////////////////////////////////////////// // senf::detail::ListParser_Iterator -template -prefix_ senf::detail::ListParser_Iterator::ListParser_Iterator() -{} - -template -prefix_ senf::detail::ListParser_Iterator:: -ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, Begin_t) - : IteratorPolicy(), i_(IteratorPolicy::setBegin(i,s)), s_(s) +template +prefix_ senf::detail::ListParser_Iterator::ListParser_Iterator() {} -template -prefix_ senf::detail::ListParser_Iterator:: -ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, End_t) - : IteratorPolicy(), i_(IteratorPolicy::setEnd(i,s)), s_(s) +template +prefix_ senf::detail::ListParser_Iterator::ListParser_Iterator(Container const & c) + : c_ (&c) {} -template -prefix_ senf::detail::ListParser_Iterator:: -ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, - PacketParserBase::data_iterator p) - : IteratorPolicy(), i_(p), s_(s) +template +prefix_ senf::PacketParserBase::data_iterator +senf::detail::ListParser_Iterator::raw() + const { - IteratorPolicy::setFromPosition(i,s,p); + return c_->Container::policy::raw(*c_, *this); } -template +template prefix_ senf::PacketParserBase::data_iterator -senf::detail::ListParser_Iterator::raw() +senf::detail::ListParser_Iterator::i() const { - return IteratorPolicy::raw(i_,s_); + return i_; +} + +template +prefix_ typename senf::detail::ListParser_Iterator & +senf::detail::ListParser_Iterator::get(typename Container::policy::iterator_data & d) +{ + return static_cast(d); +} + +template +prefix_ typename senf::detail::ListParser_Iterator const & +senf::detail::ListParser_Iterator:: +get(typename Container::policy::iterator_data const & d) +{ + return static_cast(d); } -template -prefix_ ElementParser -senf::detail::ListParser_Iterator::dereference() +template +prefix_ typename senf::detail::ListParser_Iterator::value_type +senf::detail::ListParser_Iterator::dereference() const { - return ElementParser(i_,s_); + return value_type(i_,c_->state()); } -template -prefix_ bool senf::detail::ListParser_Iterator:: -equal(ListParser_Iterator const & other) +template +prefix_ bool +senf::detail::ListParser_Iterator::equal(ListParser_Iterator const & other) const { return i_ == other.i_; } -template -prefix_ void senf::detail::ListParser_Iterator::increment() +template +prefix_ void senf::detail::ListParser_Iterator::increment() { - i_ = IteratorPolicy::next(i_,s_); + i_ = c_->Container::policy::next(*c_, *this); } /////////////////////////////////////////////////////////////////////////// @@ -213,13 +220,14 @@ prefix_ void senf::detail::ListParser_Iterator::in template prefix_ senf::ListParser_Container:: ListParser_Container(parser_type const & list) - : ListPolicy(list), state_(list.state()), i_(std::distance(data().begin(),list.i())) + : ListPolicy(static_cast(list)), + state_(list.state()), i_(std::distance(data().begin(),list.i())) {} template prefix_ senf::ListParser_Container::~ListParser_Container() { - ListPolicy::update(i(),state()); + ListPolicy::update(*this); } // Accessors @@ -229,7 +237,7 @@ prefix_ typename senf::ListParser_Container::size_type senf::ListParser_Container::size() const { - ListPolicy::update(i(),state()); + ListPolicy::update(*this); return ListPolicy::size(i(),state()); } @@ -237,7 +245,7 @@ template prefix_ bool senf::ListParser_Container::empty() const { - ListPolicy::update(i(),state()); + ListPolicy::update(*this); return begin() == end(); } @@ -246,8 +254,10 @@ prefix_ typename senf::ListParser_Container::iterator senf::ListParser_Container::begin() const { - ListPolicy::update(i(),state()); - return iterator(i(),state(),iterator::Begin); + ListPolicy::update(*this); + iterator i (*this); + i.i_ = ListPolicy::setBegin(*this, i); + return i; } template @@ -255,8 +265,10 @@ prefix_ typename senf::ListParser_Container::iterator senf::ListParser_Container::end() const { - ListPolicy::update(i(),state()); - return iterator(i(),state(),iterator::End); + ListPolicy::update(*this); + iterator i (*this); + i.i_ = ListPolicy::setEnd(*this, i); + return i; } template @@ -319,7 +331,7 @@ prefix_ typename senf::ListParser_Container::parser_type senf::ListParser_Container::parser() const { - ListPolicy::update(i(),state()); + ListPolicy::update(*this); return parser_type(i(),state()); } @@ -351,7 +363,7 @@ prefix_ typename senf::ListParser_Container::size_type senf::ListParser_Container::bytes() const { - ListPolicy::update(i(),state()); + ListPolicy::update(*this); return ListPolicy::bytes(i(),state()); }