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 + -
显示快捷键?