📄 iterator.hpp
字号:
#ifndef BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED#define BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED// Copyright Aleksey Gurtovoy 2000-2004//// 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/mpl for documentation.// $Source: /CVSROOT/CGAL/Packages/Boost/include/boost/mpl/vector/aux_/iterator.hpp,v $// $Date: 2004/11/20 10:42:27 $// $Revision: 1.1.1.2 $#include <boost/mpl/vector/aux_/at.hpp>#include <boost/mpl/iterator_tags.hpp>#include <boost/mpl/plus.hpp>#include <boost/mpl/minus.hpp>#include <boost/mpl/advance_fwd.hpp>#include <boost/mpl/distance_fwd.hpp>#include <boost/mpl/next.hpp>#include <boost/mpl/prior.hpp>#include <boost/mpl/aux_/nttp_decl.hpp>#include <boost/mpl/aux_/value_wknd.hpp>#include <boost/mpl/aux_/config/ctps.hpp>#include <boost/mpl/aux_/config/workaround.hpp>namespace boost { namespace mpl {template< typename Vector , BOOST_MPL_AUX_NTTP_DECL(long, n_) >struct v_iter{ typedef aux::v_iter_tag tag; typedef random_access_iterator_tag category; typedef typename v_at<Vector,n_>::type type; typedef Vector vector_; typedef mpl::long_<n_> pos;#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) enum { next_ = n_ + 1 , prior_ = n_ - 1 , pos_ = n_ }; typedef v_iter<Vector,next_> next; typedef v_iter<Vector,prior_> prior;#endif};#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)template< typename Vector , BOOST_MPL_AUX_NTTP_DECL(long, n_) >struct next< v_iter<Vector,n_> >{ typedef v_iter<Vector,(n_ + 1)> type;};template< typename Vector , BOOST_MPL_AUX_NTTP_DECL(long, n_) >struct prior< v_iter<Vector,n_> >{ typedef v_iter<Vector,(n_ - 1)> type;};template< typename Vector , BOOST_MPL_AUX_NTTP_DECL(long, n_) , typename Distance >struct advance< v_iter<Vector,n_>,Distance>{ typedef v_iter< Vector , (n_ + BOOST_MPL_AUX_NESTED_VALUE_WKND(long, Distance)) > type;};template< typename Vector , BOOST_MPL_AUX_NTTP_DECL(long, n_) , BOOST_MPL_AUX_NTTP_DECL(long, m_) > struct distance< v_iter<Vector,n_>, v_iter<Vector,m_> > : mpl::long_<(m_ - n_)>{};#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATIONtemplate<> struct advance_impl<aux::v_iter_tag>{ template< typename Iterator, typename N > struct apply { enum { pos_ = Iterator::pos_, n_ = N::value }; typedef v_iter< typename Iterator::vector_ , (pos_ + n_) > type; };};template<> struct distance_impl<aux::v_iter_tag>{ template< typename Iter1, typename Iter2 > struct apply { enum { pos1_ = Iter1::pos_, pos2_ = Iter2::pos_ }; typedef long_<( pos2_ - pos1_ )> type; BOOST_STATIC_CONSTANT(long, value = ( pos2_ - pos1_ )); };};#endif}}#endif // BOOST_MPL_AUX_VECTOR_ITERATOR_HPP_INCLUDED
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -