move_iterator.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 139 行

HPP
139
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#ifndef BOOST_INTERPROCESS_MOVE_ITERATOR_HPP_INCLUDED#define BOOST_INTERPROCESS_MOVE_ITERATOR_HPP_INCLUDED#include <iterator>#include <boost/interprocess/detail/move.hpp>namespace boost{namespace interprocess{namespace detail{template <class It>class move_iterator{   public:   typedef It                                                              iterator_type;   typedef typename std::iterator_traits<iterator_type>::value_type        value_type;   #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE   typedef typename move_type<value_type>::type                            reference;   #else   typedef value_type &&                                                   reference;   #endif   typedef typename std::iterator_traits<iterator_type>::pointer           pointer;   typedef typename std::iterator_traits<iterator_type>::difference_type   difference_type;   typedef typename std::iterator_traits<iterator_type>::iterator_category iterator_category;   move_iterator()   {}   explicit move_iterator(It i)      :  m_it(i)   {}   template <class U>   move_iterator(const move_iterator<U>& u)      :  m_it(u.base())   {}   const iterator_type &base() const   {  return m_it;   }   iterator_type &base()   {  return m_it;   }   reference operator*() const   #ifndef BOOST_INTERPROCESS_RVALUE_REFERENCE   {  return detail::move_impl(*m_it);  }   #else   {  return *m_it;  }   #endif   pointer   operator->() const   {  return m_it;   }   move_iterator& operator++()   {  ++m_it; return *this;   }   move_iterator<iterator_type>  operator++(int)   {  move_iterator<iterator_type> tmp(*this); ++(*this); return tmp;   }   move_iterator& operator--()   {  --m_it; return *this;   }   move_iterator<iterator_type>  operator--(int)   {  move_iterator<iterator_type> tmp(*this); --(*this); return tmp;   }   move_iterator<iterator_type>  operator+ (difference_type n) const   {  return move_iterator<iterator_type>(m_it + n);  }   move_iterator& operator+=(difference_type n)   {  m_it += n; return *this;   }   move_iterator<iterator_type>  operator- (difference_type n) const   {  return move_iterator<iterator_type>(m_it - n);  }   move_iterator& operator-=(difference_type n)   {  m_it -= n; return *this;   }   reference operator[](difference_type n) const   {  return detail::move_impl(m_it[n]);   }   private:   It m_it;};template <class It> inlinebool operator==(const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() == y.base();  }template <class It> inlinebool operator!=(const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() != y.base();  }template <class It> inlinebool operator< (const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() < y.base();   }template <class It> inlinebool operator<=(const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() <= y.base();  }template <class It> inlinebool operator> (const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() > y.base();  }template <class It> inlinebool operator>=(const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() >= y.base();  }template <class It> inlinetypename move_iterator<It>::difference_type   operator-(const move_iterator<It>& x, const move_iterator<It>& y){  return x.base() - y.base();   }template <class It> inlinemove_iterator<It>   operator+(typename move_iterator<It>::difference_type n            ,const move_iterator<It>& x){  return move_iterator<It>(x.base() + n);   }template<class It>move_iterator<It> make_move_iterator(const It &it){  return move_iterator<It>(it); }}  //namespace detail{}  //namespace interprocess{}  //namespace boost{#endif   //#ifndef BOOST_INTERPROCESS_MOVE_ITERATOR_HPP_INCLUDED

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?