|
|
|
@@ -31,7 +31,6 @@
|
|
|
|
|
#include <boost/detail/no_exceptions_support.hpp>
|
|
|
|
|
#include <functional>
|
|
|
|
|
#include <boost/functional/hash.hpp>
|
|
|
|
|
#include <boost/tti/tti.hpp>
|
|
|
|
|
|
|
|
|
|
namespace boost {
|
|
|
|
|
namespace intrusive {
|
|
|
|
@@ -388,7 +387,7 @@ void destructor_impl(Hook &, detail::link_dispatch<normal_link>)
|
|
|
|
|
#define BOOST_INTRUSIVE_BSR_INTRINSIC_64_BIT
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#ifndef __INTRIN_H_ // Avoid including any windows system header
|
|
|
|
|
#ifndef __INTRIN_H_ // Avoid including any windows system header
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif // __cplusplus
|
|
|
|
@@ -783,108 +782,108 @@ class array_initializer
|
|
|
|
|
|
|
|
|
|
template<class It>
|
|
|
|
|
class reverse_iterator
|
|
|
|
|
: public std::iterator<
|
|
|
|
|
typename std::iterator_traits<It>::iterator_category,
|
|
|
|
|
typename std::iterator_traits<It>::value_type,
|
|
|
|
|
typename std::iterator_traits<It>::difference_type,
|
|
|
|
|
typename std::iterator_traits<It>::pointer,
|
|
|
|
|
typename std::iterator_traits<It>::reference>
|
|
|
|
|
: public std::iterator<
|
|
|
|
|
typename std::iterator_traits<It>::iterator_category,
|
|
|
|
|
typename std::iterator_traits<It>::value_type,
|
|
|
|
|
typename std::iterator_traits<It>::difference_type,
|
|
|
|
|
typename std::iterator_traits<It>::pointer,
|
|
|
|
|
typename std::iterator_traits<It>::reference>
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
typedef typename std::iterator_traits<It>::pointer pointer;
|
|
|
|
|
typedef typename std::iterator_traits<It>::reference reference;
|
|
|
|
|
typedef typename std::iterator_traits<It>::difference_type difference_type;
|
|
|
|
|
typedef It iterator_type;
|
|
|
|
|
typedef typename std::iterator_traits<It>::pointer pointer;
|
|
|
|
|
typedef typename std::iterator_traits<It>::reference reference;
|
|
|
|
|
typedef typename std::iterator_traits<It>::difference_type difference_type;
|
|
|
|
|
typedef It iterator_type;
|
|
|
|
|
|
|
|
|
|
reverse_iterator(){}
|
|
|
|
|
reverse_iterator(){}
|
|
|
|
|
|
|
|
|
|
explicit reverse_iterator(It r)
|
|
|
|
|
: m_current(r)
|
|
|
|
|
explicit reverse_iterator(It r)
|
|
|
|
|
: m_current(r)
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
template<class OtherIt>
|
|
|
|
|
reverse_iterator(const reverse_iterator<OtherIt>& r)
|
|
|
|
|
: m_current(r.base())
|
|
|
|
|
{}
|
|
|
|
|
template<class OtherIt>
|
|
|
|
|
reverse_iterator(const reverse_iterator<OtherIt>& r)
|
|
|
|
|
: m_current(r.base())
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
It base() const
|
|
|
|
|
It base() const
|
|
|
|
|
{ return m_current; }
|
|
|
|
|
|
|
|
|
|
reference operator*() const
|
|
|
|
|
reference operator*() const
|
|
|
|
|
{ It temp(m_current); --temp; return *temp; }
|
|
|
|
|
|
|
|
|
|
pointer operator->() const
|
|
|
|
|
pointer operator->() const
|
|
|
|
|
{ It temp(m_current); --temp; return temp.operator->(); }
|
|
|
|
|
|
|
|
|
|
reference operator[](difference_type off) const
|
|
|
|
|
{ return this->m_current[-off]; }
|
|
|
|
|
reference operator[](difference_type off) const
|
|
|
|
|
{ return this->m_current[-off]; }
|
|
|
|
|
|
|
|
|
|
reverse_iterator& operator++()
|
|
|
|
|
reverse_iterator& operator++()
|
|
|
|
|
{ --m_current; return *this; }
|
|
|
|
|
|
|
|
|
|
reverse_iterator operator++(int)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator temp = *this;
|
|
|
|
|
--m_current;
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reverse_iterator& operator--()
|
|
|
|
|
{
|
|
|
|
|
++m_current;
|
|
|
|
|
return *this;
|
|
|
|
|
reverse_iterator operator++(int)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator temp = *this;
|
|
|
|
|
--m_current;
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
reverse_iterator operator--(int)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator temp(*this);
|
|
|
|
|
++m_current;
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
reverse_iterator& operator--()
|
|
|
|
|
{
|
|
|
|
|
++m_current;
|
|
|
|
|
return *this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
friend bool operator==(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current == r.m_current; }
|
|
|
|
|
reverse_iterator operator--(int)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator temp(*this);
|
|
|
|
|
++m_current;
|
|
|
|
|
return temp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current != r.m_current; }
|
|
|
|
|
friend bool operator==(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current == r.m_current; }
|
|
|
|
|
|
|
|
|
|
friend bool operator<(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current < r.m_current; }
|
|
|
|
|
friend bool operator!=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current != r.m_current; }
|
|
|
|
|
|
|
|
|
|
friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current <= r.m_current; }
|
|
|
|
|
friend bool operator<(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current < r.m_current; }
|
|
|
|
|
|
|
|
|
|
friend bool operator>(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current > r.m_current; }
|
|
|
|
|
friend bool operator<=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current <= r.m_current; }
|
|
|
|
|
|
|
|
|
|
friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current >= r.m_current; }
|
|
|
|
|
friend bool operator>(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current > r.m_current; }
|
|
|
|
|
|
|
|
|
|
reverse_iterator& operator+=(difference_type off)
|
|
|
|
|
{ m_current -= off; return *this; }
|
|
|
|
|
friend bool operator>=(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return l.m_current >= r.m_current; }
|
|
|
|
|
|
|
|
|
|
friend reverse_iterator operator+(const reverse_iterator & l, difference_type off)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator& operator+=(difference_type off)
|
|
|
|
|
{ m_current -= off; return *this; }
|
|
|
|
|
|
|
|
|
|
friend reverse_iterator operator+(const reverse_iterator & l, difference_type off)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator tmp(l.m_current);
|
|
|
|
|
tmp.m_current -= off;
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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-(const reverse_iterator & l, difference_type off)
|
|
|
|
|
{
|
|
|
|
|
friend reverse_iterator operator-(const reverse_iterator & l, difference_type off)
|
|
|
|
|
{
|
|
|
|
|
reverse_iterator tmp(l.m_current);
|
|
|
|
|
tmp.m_current += off;
|
|
|
|
|
return tmp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return r.m_current - l.m_current; }
|
|
|
|
|
friend difference_type operator-(const reverse_iterator& l, const reverse_iterator& r)
|
|
|
|
|
{ return r.m_current - l.m_current; }
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
It m_current; // the wrapped iterator
|
|
|
|
|
It m_current; // the wrapped iterator
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
template<class ConstNodePtr>
|
|
|
|
|