Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-18 09:46:55

0001 /*=============================================================================
0002     Copyright (c) 2005-2013 Joel de Guzman
0003 
0004     Distributed under the Boost Software License, Version 1.0. (See accompanying
0005     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 ==============================================================================*/
0007 #if !defined(BOOST_FUSION_BUILD_DEQUE_02032013_1921)
0008 #define BOOST_FUSION_BUILD_DEQUE_02032013_1921
0009 
0010 #include <boost/fusion/support/config.hpp>
0011 #include <boost/fusion/iterator/equal_to.hpp>
0012 #include <boost/fusion/iterator/next.hpp>
0013 #include <boost/fusion/iterator/value_of.hpp>
0014 #include <boost/fusion/iterator/deref.hpp>
0015 #include <boost/fusion/sequence/intrinsic/begin.hpp>
0016 #include <boost/fusion/sequence/intrinsic/end.hpp>
0017 #include <boost/fusion/container/deque/front_extended_deque.hpp>
0018 
0019 namespace boost { namespace fusion { namespace detail
0020 {
0021     template <typename First, typename Last
0022       , bool is_empty = result_of::equal_to<First, Last>::value>
0023     struct build_deque;
0024 
0025     template <typename First, typename Last>
0026     struct build_deque<First, Last, true>
0027     {
0028         typedef deque<> type;
0029         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0030         static type
0031         call(First const&, Last const&)
0032         {
0033             return type();
0034         }
0035     };
0036 
0037     template <typename T, typename Rest>
0038     struct push_front_deque;
0039 
0040     template <typename T, typename ...Rest>
0041     struct push_front_deque<T, deque<Rest...>>
0042     {
0043         typedef deque<T, Rest...> type;
0044 
0045         BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0046         static type
0047         call(T const& first, deque<Rest...> const& rest)
0048         {
0049             return type(front_extended_deque<deque<Rest...>, T>(rest, first));
0050         }
0051     };
0052 
0053     template <typename First, typename Last>
0054     struct build_deque<First, Last, false>
0055     {
0056         typedef
0057             build_deque<typename result_of::next<First>::type, Last>
0058         next_build_deque;
0059 
0060         typedef push_front_deque<
0061             typename result_of::value_of<First>::type
0062           , typename next_build_deque::type>
0063         push_front;
0064 
0065         typedef typename push_front::type type;
0066 
0067         BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
0068         static type
0069         call(First const& f, Last const& l)
0070         {
0071             typename result_of::value_of<First>::type v = *f;
0072             return push_front::call(
0073                 v, next_build_deque::call(fusion::next(f), l));
0074         }
0075     };
0076 }}}
0077 
0078 #endif