📄 iterator.hpp
字号:
reverse_iterator_base &operator ++ () {
// Comeau recommends...
return *this = -- this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base operator ++ (int) {
// Comeau recommends...
reverse_iterator_base tmp (*this);
*this = -- this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base &operator -- () {
// Comeau recommends...
return *this = ++ this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base operator -- (int) {
// Comeau recommends...
reverse_iterator_base tmp (*this);
*this = ++ this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base &operator += (difference_type n) {
// Comeau recommends...
return *this = this->base () - n;
}
BOOST_UBLAS_INLINE
reverse_iterator_base &operator -= (difference_type n) {
// Comeau recommends...
return *this = this->base () + n;
}
#endif
#ifndef BOOST_UBLAS_NO_MEMBER_FRIENDS
BOOST_UBLAS_INLINE
friend reverse_iterator_base operator + (const reverse_iterator_base &it, difference_type n) {
reverse_iterator_base tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base operator + (difference_type n, const reverse_iterator_base &it) {
reverse_iterator_base tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base operator - (const reverse_iterator_base &it, difference_type n) {
reverse_iterator_base tmp (it);
return tmp -= n;
}
BOOST_UBLAS_INLINE
friend difference_type operator - (const reverse_iterator_base &it1, const reverse_iterator_base &it2) {
return it2.base () - it1.base ();
}
#endif
BOOST_UBLAS_INLINE
const container_type &operator () () const {
// Comeau recommends...
return this->base () ();
}
BOOST_UBLAS_INLINE
size_type index () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).index ();
}
};
#ifdef BOOST_UBLAS_NO_MEMBER_FRIENDS
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base<I> operator + (const reverse_iterator_base<I> &it, std::ptrdiff_t n) {
reverse_iterator_base<I> tmp (it);
return tmp += n;
}
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base<I> operator + (std::ptrdiff_t n, const reverse_iterator_base<I> &it) {
reverse_iterator_base<I> tmp (it);
return tmp += n;
}
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base<I> operator - (const reverse_iterator_base<I> &it, std::ptrdiff_t n) {
reverse_iterator_base<I> tmp (it);
return tmp -= n;
}
template<class I>
BOOST_UBLAS_INLINE
std::ptrdiff_t operator - (const reverse_iterator_base<I> &it1, const reverse_iterator_base<I> &it2) {
return it2.base () - it1.base ();
}
#endif
// Renamed this class from reverse_iterator1 to get
// typedef reverse_iterator1<...> reverse_iterator1
// working. Thanks to Gabriel Dos Reis for explaining this.
template <class I>
class reverse_iterator_base1:
public std::reverse_iterator<I> {
public:
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef I iterator_type;
typedef typename I::container_type container_type;
typedef typename I::dual_iterator_type dual_iterator_type;
typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
// Construction and destruction
BOOST_UBLAS_INLINE
reverse_iterator_base1 ():
std::reverse_iterator<iterator_type> () {}
BOOST_UBLAS_INLINE
reverse_iterator_base1 (const iterator_type &it):
std::reverse_iterator<iterator_type> (it) {}
#ifdef BOOST_UBLAS_REVERSE_ITERATOR_OVERLOADS
// Arithmetic
BOOST_UBLAS_INLINE
reverse_iterator_base1 &operator ++ () {
// Comeau recommends...
return *this = -- this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base1 operator ++ (int) {
// Comeau recommends...
reverse_iterator_base1 tmp (*this);
*this = -- this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base1 &operator -- () {
// Comeau recommends...
return *this = ++ this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base1 operator -- (int) {
// Comeau recommends...
reverse_iterator_base1 tmp (*this);
*this = ++ this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base1 &operator += (difference_type n) {
// Comeau recommends...
return *this = this->base () - n;
}
BOOST_UBLAS_INLINE
reverse_iterator_base1 &operator -= (difference_type n) {
// Comeau recommends...
return *this = this->base () + n;
}
#endif
#ifndef BOOST_UBLAS_NO_MEMBER_FRIENDS
BOOST_UBLAS_INLINE
friend reverse_iterator_base1 operator + (const reverse_iterator_base1 &it, difference_type n) {
reverse_iterator_base1 tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base1 operator + (difference_type n, const reverse_iterator_base1 &it) {
reverse_iterator_base1 tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base1 operator - (const reverse_iterator_base1 &it, difference_type n) {
reverse_iterator_base1 tmp (it);
return tmp -= n;
}
BOOST_UBLAS_INLINE
friend difference_type operator - (const reverse_iterator_base1 &it1, const reverse_iterator_base1 &it2) {
return it2.base () - it1.base ();
}
#endif
BOOST_UBLAS_INLINE
const container_type &operator () () const {
// Comeau recommends...
return this->base () ();
}
BOOST_UBLAS_INLINE
size_type index1 () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).index1 ();
}
BOOST_UBLAS_INLINE
size_type index2 () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).index2 ();
}
BOOST_UBLAS_INLINE
dual_iterator_type begin () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).begin ();
}
BOOST_UBLAS_INLINE
dual_iterator_type end () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).end ();
}
BOOST_UBLAS_INLINE
dual_reverse_iterator_type rbegin () const {
return dual_reverse_iterator_type (end ());
}
BOOST_UBLAS_INLINE
dual_reverse_iterator_type rend () const {
return dual_reverse_iterator_type (begin ());
}
};
#ifdef BOOST_UBLAS_NO_MEMBER_FRIENDS
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base1<I> operator + (const reverse_iterator_base1<I> &it, std::ptrdiff_t n) {
reverse_iterator_base1<I> tmp (it);
return tmp += n;
}
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base1<I> operator + (std::ptrdiff_t n, const reverse_iterator_base1<I> &it) {
reverse_iterator_base1<I> tmp (it);
return tmp += n;
}
template<class I>
BOOST_UBLAS_INLINE
reverse_iterator_base1<I> operator - (const reverse_iterator_base1<I> &it, std::ptrdiff_t n) {
reverse_iterator_base1<I> tmp (it);
return tmp -= n;
}
template<class I>
BOOST_UBLAS_INLINE
std::ptrdiff_t operator - (const reverse_iterator_base1<I> &it1, const reverse_iterator_base1<I> &it2) {
return it2.base () - it1.base ();
}
#endif
// Renamed this class from reverse_iterator2 to get
// typedef reverse_iterator2<...> reverse_iterator2
// working. Thanks to Gabriel Dos Reis for explaining this.
template <class I>
class reverse_iterator_base2:
public std::reverse_iterator<I> {
public:
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef I iterator_type;
typedef typename I::container_type container_type;
typedef typename I::dual_iterator_type dual_iterator_type;
typedef typename I::dual_reverse_iterator_type dual_reverse_iterator_type;
// Construction and destruction
BOOST_UBLAS_INLINE
reverse_iterator_base2 ():
std::reverse_iterator<iterator_type> () {}
BOOST_UBLAS_INLINE
reverse_iterator_base2 (const iterator_type &it):
std::reverse_iterator<iterator_type> (it) {}
#ifdef BOOST_UBLAS_REVERSE_ITERATOR_OVERLOADS
// Arithmetic
BOOST_UBLAS_INLINE
reverse_iterator_base2 &operator ++ () {
// Comeau recommends...
return *this = -- this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base2 operator ++ (int) {
// Comeau recommends...
reverse_iterator_base2 tmp (*this);
*this = -- this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base2 &operator -- () {
// Comeau recommends...
return *this = ++ this->base ();
}
BOOST_UBLAS_INLINE
reverse_iterator_base2 operator -- (int) {
// Comeau recommends...
reverse_iterator_base2 tmp (*this);
*this = ++ this->base ();
return tmp;
}
BOOST_UBLAS_INLINE
reverse_iterator_base2 &operator += (difference_type n) {
// Comeau recommends...
return *this = this->base () - n;
}
BOOST_UBLAS_INLINE
reverse_iterator_base2 &operator -= (difference_type n) {
// Comeau recommends...
return *this = this->base () + n;
}
#endif
#ifndef BOOST_UBLAS_NO_MEMBER_FRIENDS
BOOST_UBLAS_INLINE
friend reverse_iterator_base2 operator + (const reverse_iterator_base2 &it, difference_type n) {
reverse_iterator_base2 tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base2 operator + (difference_type n, const reverse_iterator_base2 &it) {
reverse_iterator_base2 tmp (it);
return tmp += n;
}
BOOST_UBLAS_INLINE
friend reverse_iterator_base2 operator - (const reverse_iterator_base2 &it, difference_type n) {
reverse_iterator_base2 tmp (it);
return tmp -= n;
}
BOOST_UBLAS_INLINE
friend difference_type operator - (const reverse_iterator_base2 &it1, const reverse_iterator_base2 &it2) {
return it2.base () - it1.base ();
}
#endif
BOOST_UBLAS_INLINE
const container_type &operator () () const {
// Comeau recommends...
return this->base () ();
}
BOOST_UBLAS_INLINE
size_type index1 () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).index1 ();
}
BOOST_UBLAS_INLINE
size_type index2 () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).index2 ();
}
BOOST_UBLAS_INLINE
dual_iterator_type begin () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).begin ();
}
BOOST_UBLAS_INLINE
dual_iterator_type end () const {
// Comeau recommends...
iterator_type tmp (this->base ());
return (-- tmp).end ();
}
BOOST_UBLAS_INLINE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -