1 /*============================================================================= 2 Copyright (c) 2011 Eric Niebler 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 ==============================================================================*/ 7 8 #if !defined(BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM) 9 #define BOOST_FUSION_SINGLE_VIEW_ADVANCE_IMPL_JUL_07_2011_1348PM 10 11 #include <boost/fusion/support/config.hpp> 12 #include <boost/mpl/plus.hpp> 13 14 namespace boost { namespace fusion 15 { 16 struct single_view_iterator_tag; 17 18 template <typename SingleView, typename Pos> 19 struct single_view_iterator; 20 21 namespace extension 22 { 23 template<typename Tag> 24 struct advance_impl; 25 26 template<> 27 struct advance_impl<single_view_iterator_tag> 28 { 29 template<typename Iterator, typename Dist> 30 struct apply 31 { 32 typedef single_view_iterator< 33 typename Iterator::single_view_type, 34 typename mpl::plus<typename Iterator::position, Dist>::type> 35 type; 36 37 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 38 static type callboost::fusion::extension::advance_impl::apply39 call(Iterator const& i) 40 { 41 return type(i.view); 42 } 43 }; 44 }; 45 } 46 47 }} 48 49 #endif 50