annotate DEPENDENCIES/generic/include/boost/fusion/view/nview/nview.hpp @ 120:4729c8589274 emscripten-piper

Add piper builds
author Chris Cannam
date Fri, 11 Nov 2016 15:49:32 +0000
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2009 Hartmut Kaiser
Chris@16 3
Chris@16 4 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6 ==============================================================================*/
Chris@16 7
Chris@16 8 #if !defined(BOOST_FUSION_NVIEW_SEP_23_2009_0948PM)
Chris@16 9 #define BOOST_FUSION_NVIEW_SEP_23_2009_0948PM
Chris@16 10
Chris@101 11 #include <boost/fusion/support/config.hpp>
Chris@16 12 #include <boost/mpl/size.hpp>
Chris@16 13 #include <boost/mpl/if.hpp>
Chris@16 14 #include <boost/mpl/vector_c.hpp>
Chris@16 15 #include <boost/utility/result_of.hpp>
Chris@16 16
Chris@16 17 #include <boost/type_traits/remove_reference.hpp>
Chris@16 18 #include <boost/type_traits/add_reference.hpp>
Chris@16 19 #include <boost/type_traits/add_const.hpp>
Chris@16 20
Chris@16 21 #include <boost/fusion/support/is_view.hpp>
Chris@16 22 #include <boost/fusion/support/category_of.hpp>
Chris@16 23 #include <boost/fusion/support/sequence_base.hpp>
Chris@16 24 #include <boost/fusion/container/vector.hpp>
Chris@16 25 #include <boost/fusion/view/transform_view.hpp>
Chris@16 26
Chris@16 27 #include <boost/config.hpp>
Chris@16 28
Chris@16 29 namespace boost { namespace fusion
Chris@16 30 {
Chris@16 31 namespace detail
Chris@16 32 {
Chris@16 33 struct addref
Chris@16 34 {
Chris@16 35 template<typename Sig>
Chris@16 36 struct result;
Chris@16 37
Chris@16 38 template<typename U>
Chris@16 39 struct result<addref(U)> : add_reference<U> {};
Chris@16 40
Chris@16 41 #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
Chris@16 42 template <typename T>
Chris@101 43 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 44 typename add_reference<T>::type
Chris@16 45 operator()(T& x) const
Chris@16 46 {
Chris@16 47 return x;
Chris@16 48 }
Chris@16 49 #else
Chris@16 50 template <typename T>
Chris@101 51 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 52 typename result<addref(T)>::type
Chris@16 53 operator()(T&& x) const
Chris@16 54 {
Chris@16 55 return x;
Chris@16 56 }
Chris@16 57 #endif
Chris@16 58 };
Chris@16 59
Chris@16 60 struct addconstref
Chris@16 61 {
Chris@16 62 template<typename Sig>
Chris@16 63 struct result;
Chris@16 64
Chris@16 65 template<typename U>
Chris@16 66 struct result<addconstref(U)>
Chris@16 67 : add_reference<typename add_const<U>::type>
Chris@16 68 {};
Chris@16 69
Chris@16 70 template <typename T>
Chris@101 71 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 72 typename add_reference<typename add_const<T>::type>::type
Chris@16 73 operator()(T& x) const
Chris@16 74 {
Chris@16 75 return x;
Chris@16 76 }
Chris@16 77
Chris@16 78 template <typename T>
Chris@101 79 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 80 typename add_reference<typename add_const<T>::type>::type
Chris@16 81 operator()(T const& x) const
Chris@16 82 {
Chris@16 83 return x;
Chris@16 84 }
Chris@16 85 };
Chris@16 86 }
Chris@16 87
Chris@16 88 struct nview_tag;
Chris@16 89 struct random_access_traversal_tag;
Chris@16 90 struct fusion_sequence_tag;
Chris@16 91
Chris@16 92 template<typename Sequence, typename Indicies>
Chris@16 93 struct nview
Chris@16 94 : sequence_base<nview<Sequence, Indicies> >
Chris@16 95 {
Chris@16 96 typedef nview_tag fusion_tag;
Chris@16 97 typedef fusion_sequence_tag tag; // this gets picked up by MPL
Chris@16 98 typedef random_access_traversal_tag category;
Chris@16 99
Chris@16 100 typedef mpl::true_ is_view;
Chris@16 101 typedef Indicies index_type;
Chris@16 102 typedef typename mpl::size<Indicies>::type size;
Chris@16 103
Chris@16 104 typedef typename mpl::if_<
Chris@16 105 is_const<Sequence>, detail::addconstref, detail::addref
Chris@16 106 >::type transform_type;
Chris@16 107 typedef transform_view<Sequence, transform_type> transform_view_type;
Chris@16 108 typedef typename result_of::as_vector<transform_view_type>::type
Chris@16 109 sequence_type;
Chris@16 110
Chris@101 111 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 112 explicit nview(Sequence& val)
Chris@16 113 : seq(sequence_type(transform_view_type(val, transform_type())))
Chris@16 114 {}
Chris@16 115
Chris@16 116 sequence_type seq;
Chris@16 117 };
Chris@16 118
Chris@16 119 }}
Chris@16 120
Chris@16 121 // define the nview() generator functions
Chris@16 122 #include <boost/fusion/view/nview/detail/nview_impl.hpp>
Chris@16 123
Chris@16 124 #endif
Chris@16 125
Chris@16 126