Chris@16: /*============================================================================= Chris@16: Copyright (c) 2005-2012 Joel de Guzman Chris@16: Copyright (c) 2005-2006 Dan Marsden Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: ==============================================================================*/ Chris@16: #if !defined(BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017) Chris@16: #define BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017 Chris@16: Chris@101: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace fusion Chris@16: { Chris@16: struct deque_tag; Chris@16: Chris@16: namespace extension Chris@16: { Chris@16: template Chris@16: struct at_impl; Chris@16: Chris@16: template<> Chris@16: struct at_impl Chris@16: { Chris@16: template Chris@16: struct apply Chris@16: { Chris@16: typedef typename Sequence::next_up next_up; Chris@16: typedef typename Sequence::next_down next_down; Chris@16: BOOST_MPL_ASSERT_RELATION(next_down::value, !=, next_up::value); Chris@16: Chris@16: static int const offset = next_down::value + 1; Chris@16: typedef mpl::int_<(N::value + offset)> adjusted_index; Chris@16: typedef typename Chris@16: detail::keyed_element_value_at::type Chris@16: element_type; Chris@16: Chris@16: typedef typename Chris@16: add_reference< Chris@16: typename mpl::eval_if< Chris@16: is_const, Chris@16: add_const, Chris@16: mpl::identity >::type Chris@16: >::type Chris@16: type; Chris@16: Chris@101: BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED Chris@16: static type call(Sequence& seq) Chris@16: { Chris@16: return seq.get(adjusted_index()); Chris@16: } Chris@16: }; Chris@16: }; Chris@16: } Chris@16: }} Chris@16: Chris@16: #endif