annotate DEPENDENCIES/generic/include/boost/intrusive/detail/reverse_iterator.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 /////////////////////////////////////////////////////////////////////////////
Chris@102 2 //
Chris@102 3 // (C) Copyright Ion Gaztanaga 2014-2014
Chris@102 4 //
Chris@102 5 // Distributed under the Boost Software License, Version 1.0.
Chris@102 6 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 8 //
Chris@102 9 // See http://www.boost.org/libs/intrusive for documentation.
Chris@102 10 //
Chris@102 11 /////////////////////////////////////////////////////////////////////////////
Chris@102 12
Chris@102 13 #ifndef BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP
Chris@102 14 #define BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP
Chris@102 15
Chris@102 16 #ifndef BOOST_CONFIG_HPP
Chris@102 17 # include <boost/config.hpp>
Chris@102 18 #endif
Chris@102 19
Chris@102 20 #if defined(BOOST_HAS_PRAGMA_ONCE)
Chris@102 21 # pragma once
Chris@102 22 #endif
Chris@102 23
Chris@102 24 #include <boost/intrusive/detail/config_begin.hpp>
Chris@102 25 #include <boost/intrusive/detail/iterator.hpp>
Chris@102 26
Chris@102 27 namespace boost {
Chris@102 28 namespace intrusive {
Chris@102 29
Chris@102 30 template<class It>
Chris@102 31 class reverse_iterator
Chris@102 32 {
Chris@102 33 public:
Chris@102 34 typedef typename boost::intrusive::iterator_traits<It>::pointer pointer;
Chris@102 35 typedef typename boost::intrusive::iterator_traits<It>::reference reference;
Chris@102 36 typedef typename boost::intrusive::iterator_traits<It>::difference_type difference_type;
Chris@102 37 typedef typename boost::intrusive::iterator_traits<It>::iterator_category iterator_category;
Chris@102 38 typedef typename boost::intrusive::iterator_traits<It>::value_type value_type;
Chris@102 39
Chris@102 40
Chris@102 41 typedef It iterator_type;
Chris@102 42
Chris@102 43 reverse_iterator()
Chris@102 44 : m_current() //Value initialization to achieve "null iterators" (N3644)
Chris@102 45 {}
Chris@102 46
Chris@102 47 explicit reverse_iterator(It r)
Chris@102 48 : m_current(r)
Chris@102 49 {}
Chris@102 50
Chris@102 51 template<class OtherIt>
Chris@102 52 reverse_iterator(const reverse_iterator<OtherIt>& r)
Chris@102 53 : m_current(r.base())
Chris@102 54 {}
Chris@102 55
Chris@102 56 It base() const
Chris@102 57 { return m_current; }
Chris@102 58
Chris@102 59 reference operator*() const
Chris@102 60 { It temp(m_current); --temp; return *temp; }
Chris@102 61
Chris@102 62 pointer operator->() const
Chris@102 63 { It temp(m_current); --temp; return temp.operator->(); }
Chris@102 64
Chris@102 65 reference operator[](difference_type off) const
Chris@102 66 { return this->m_current[-off-1]; }
Chris@102 67
Chris@102 68 reverse_iterator& operator++()
Chris@102 69 { --m_current; return *this; }
Chris@102 70
Chris@102 71 reverse_iterator operator++(int)
Chris@102 72 {
Chris@102 73 reverse_iterator temp = *this;
Chris@102 74 --m_current;
Chris@102 75 return temp;
Chris@102 76 }
Chris@102 77
Chris@102 78 reverse_iterator& operator--()
Chris@102 79 {
Chris@102 80 ++m_current;
Chris@102 81 return *this;
Chris@102 82 }
Chris@102 83
Chris@102 84 reverse_iterator operator--(int)
Chris@102 85 {
Chris@102 86 reverse_iterator temp(*this);
Chris@102 87 ++m_current;
Chris@102 88 return temp;
Chris@102 89 }
Chris@102 90
Chris@102 91 friend bool operator==(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 92 { return l.m_current == r.m_current; }
Chris@102 93
Chris@102 94 friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 95 { return l.m_current != r.m_current; }
Chris@102 96
Chris@102 97 friend bool operator<(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 98 { return l.m_current > r.m_current; }
Chris@102 99
Chris@102 100 friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 101 { return l.m_current >= r.m_current; }
Chris@102 102
Chris@102 103 friend bool operator>(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 104 { return l.m_current < r.m_current; }
Chris@102 105
Chris@102 106 friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 107 { return l.m_current <= r.m_current; }
Chris@102 108
Chris@102 109 reverse_iterator& operator+=(difference_type off)
Chris@102 110 { m_current -= off; return *this; }
Chris@102 111
Chris@102 112 friend reverse_iterator operator+(const reverse_iterator & l, difference_type off)
Chris@102 113 {
Chris@102 114 reverse_iterator tmp(l.m_current);
Chris@102 115 tmp.m_current -= off;
Chris@102 116 return tmp;
Chris@102 117 }
Chris@102 118
Chris@102 119 reverse_iterator& operator-=(difference_type off)
Chris@102 120 { m_current += off; return *this; }
Chris@102 121
Chris@102 122 friend reverse_iterator operator-(const reverse_iterator & l, difference_type off)
Chris@102 123 {
Chris@102 124 reverse_iterator tmp(l.m_current);
Chris@102 125 tmp.m_current += off;
Chris@102 126 return tmp;
Chris@102 127 }
Chris@102 128
Chris@102 129 friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r)
Chris@102 130 { return r.m_current - l.m_current; }
Chris@102 131
Chris@102 132 private:
Chris@102 133 It m_current; // the wrapped iterator
Chris@102 134 };
Chris@102 135
Chris@102 136 } //namespace intrusive {
Chris@102 137 } //namespace boost {
Chris@102 138
Chris@102 139 #include <boost/intrusive/detail/config_end.hpp>
Chris@102 140
Chris@102 141 #endif //BOOST_INTRUSIVE_DETAIL_REVERSE_ITERATOR_HPP