diff options
Diffstat (limited to 'boost/intrusive/detail/reverse_iterator.hpp')
-rw-r--r-- | boost/intrusive/detail/reverse_iterator.hpp | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/boost/intrusive/detail/reverse_iterator.hpp b/boost/intrusive/detail/reverse_iterator.hpp index 552e8f4d71..57631feb5d 100644 --- a/boost/intrusive/detail/reverse_iterator.hpp +++ b/boost/intrusive/detail/reverse_iterator.hpp @@ -43,12 +43,16 @@ class reverse_iterator reverse_iterator() : m_current() //Value initialization to achieve "null iterators" (N3644) - {} + {} explicit reverse_iterator(It r) : m_current(r) {} + reverse_iterator(const reverse_iterator& r) + : m_current(r.base()) + {} + template<class OtherIt> reverse_iterator( const reverse_iterator<OtherIt>& r , typename boost::intrusive::detail::enable_if_convertible<OtherIt, It>::type* =0 @@ -56,6 +60,9 @@ class reverse_iterator : m_current(r.base()) {} + reverse_iterator & operator=( const reverse_iterator& r) + { m_current = r.base(); return *this; } + template<class OtherIt> typename boost::intrusive::detail::enable_if_convertible<OtherIt, It, reverse_iterator &>::type operator=( const reverse_iterator<OtherIt>& r) @@ -65,20 +72,34 @@ class reverse_iterator { return m_current; } reference operator*() const - { It temp(m_current); --temp; return *temp; } + { + It temp(m_current); + --temp; + reference r = *temp; + return r; + } pointer operator->() const - { It temp(m_current); --temp; return iterator_arrow_result(temp); } + { + It temp(m_current); + --temp; + return iterator_arrow_result(temp); + } reference operator[](difference_type off) const - { return this->m_current[-off - 1]; } + { + return this->m_current[-off - 1]; + } reverse_iterator& operator++() - { --m_current; return *this; } + { + --m_current; + return *this; + } reverse_iterator operator++(int) { - reverse_iterator temp = *this; + reverse_iterator temp((*this)); --m_current; return temp; } @@ -91,7 +112,7 @@ class reverse_iterator reverse_iterator operator--(int) { - reverse_iterator temp(*this); + reverse_iterator temp((*this)); ++m_current; return temp; } @@ -117,17 +138,17 @@ class reverse_iterator reverse_iterator& operator+=(difference_type off) { m_current -= off; return *this; } + reverse_iterator& operator-=(difference_type off) + { m_current += off; return *this; } + friend reverse_iterator operator+(reverse_iterator l, difference_type off) - { l.m_current -= off; return l; } + { return (l += off); } friend reverse_iterator operator+(difference_type off, reverse_iterator r) { return (r += off); } - reverse_iterator& operator-=(difference_type off) - { m_current += off; return *this; } - friend reverse_iterator operator-(reverse_iterator l, difference_type off) - { l.m_current += off; return l; } + { return (l-= off); } friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r) { return r.m_current - l.m_current; } |