annotate DEPENDENCIES/generic/include/boost/fusion/container/deque/deque.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2005-2012 Joel de Guzman
Chris@16 3 Copyright (c) 2005-2006 Dan Marsden
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 ==============================================================================*/
Chris@16 8 #if !defined(BOOST_FUSION_DEQUE_26112006_1649)
Chris@16 9 #define BOOST_FUSION_DEQUE_26112006_1649
Chris@16 10
Chris@16 11 # include <boost/fusion/container/deque/deque_fwd.hpp>
Chris@16 12
Chris@16 13 ///////////////////////////////////////////////////////////////////////////////
Chris@16 14 // Without variadics, we will use the PP version
Chris@16 15 ///////////////////////////////////////////////////////////////////////////////
Chris@16 16 #if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
Chris@16 17 # include <boost/fusion/container/deque/detail/cpp03/deque.hpp>
Chris@16 18 #else
Chris@16 19
Chris@16 20 ///////////////////////////////////////////////////////////////////////////////
Chris@16 21 // C++11 interface
Chris@16 22 ///////////////////////////////////////////////////////////////////////////////
Chris@16 23 #include <boost/fusion/support/sequence_base.hpp>
Chris@16 24 #include <boost/fusion/support/detail/access.hpp>
Chris@16 25 #include <boost/fusion/support/is_sequence.hpp>
Chris@16 26 #include <boost/fusion/container/deque/detail/keyed_element.hpp>
Chris@16 27 #include <boost/fusion/container/deque/detail/deque_keyed_values.hpp>
Chris@16 28 #include <boost/fusion/container/deque/deque_fwd.hpp>
Chris@16 29 #include <boost/fusion/container/deque/detail/value_at_impl.hpp>
Chris@16 30 #include <boost/fusion/container/deque/detail/at_impl.hpp>
Chris@16 31 #include <boost/fusion/container/deque/detail/begin_impl.hpp>
Chris@16 32 #include <boost/fusion/container/deque/detail/end_impl.hpp>
Chris@16 33 #include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
Chris@16 34 #include <boost/fusion/sequence/intrinsic/begin.hpp>
Chris@16 35 #include <boost/fusion/sequence/intrinsic/empty.hpp>
Chris@16 36
Chris@16 37 #include <boost/mpl/int.hpp>
Chris@16 38 #include <boost/mpl/and.hpp>
Chris@16 39 #include <boost/utility/enable_if.hpp>
Chris@16 40 #include <boost/type_traits/is_convertible.hpp>
Chris@16 41
Chris@16 42 namespace boost { namespace fusion
Chris@16 43 {
Chris@16 44 struct deque_tag;
Chris@16 45
Chris@16 46 template <typename ...Elements>
Chris@16 47 struct deque : detail::nil_keyed_element
Chris@16 48 {
Chris@16 49 typedef deque_tag fusion_tag;
Chris@16 50 typedef bidirectional_traversal_tag category;
Chris@16 51 typedef mpl::int_<0> size;
Chris@16 52 typedef mpl::int_<0> next_up;
Chris@101 53 typedef mpl::int_<-1> next_down;
Chris@16 54 typedef mpl::false_ is_view;
Chris@16 55
Chris@16 56 template <typename Sequence>
Chris@101 57 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 58 deque(Sequence const&,
Chris@16 59 typename enable_if<
Chris@16 60 mpl::and_<
Chris@16 61 traits::is_sequence<Sequence>
Chris@101 62 , result_of::empty<Sequence>>>::type* /*dummy*/ = 0) BOOST_NOEXCEPT
Chris@16 63 {}
Chris@16 64
Chris@101 65 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 66 deque() BOOST_NOEXCEPT {}
Chris@16 67 };
Chris@16 68
Chris@16 69 template <typename Head, typename ...Tail>
Chris@16 70 struct deque<Head, Tail...>
Chris@16 71 : detail::deque_keyed_values<Head, Tail...>::type
Chris@16 72 , sequence_base<deque<Head, Tail...>>
Chris@16 73 {
Chris@16 74 typedef deque_tag fusion_tag;
Chris@16 75 typedef bidirectional_traversal_tag category;
Chris@16 76 typedef typename detail::deque_keyed_values<Head, Tail...>::type base;
Chris@16 77 typedef mpl::int_<(sizeof ...(Tail) + 1)> size;
Chris@16 78 typedef mpl::int_<size::value> next_up;
Chris@101 79 typedef mpl::int_<-1> next_down;
Chris@16 80 typedef mpl::false_ is_view;
Chris@16 81
Chris@101 82 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 83 deque()
Chris@16 84 {}
Chris@16 85
Chris@101 86 template <typename Head_, typename ...Tail_, typename =
Chris@101 87 typename enable_if<is_convertible<Head_, Head> >::type
Chris@101 88 >
Chris@101 89 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 90 deque(deque<Head_, Tail_...> const& seq)
Chris@16 91 : base(seq)
Chris@16 92 {}
Chris@16 93
Chris@101 94 template <typename Head_, typename ...Tail_, typename =
Chris@101 95 typename enable_if<is_convertible<Head_, Head> >::type
Chris@101 96 >
Chris@101 97 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 98 deque(deque<Head_, Tail_...>& seq)
Chris@16 99 : base(seq)
Chris@16 100 {}
Chris@16 101
Chris@16 102 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
Chris@101 103 template <typename Head_, typename ...Tail_, typename =
Chris@101 104 typename enable_if<is_convertible<Head_, Head> >::type
Chris@101 105 >
Chris@101 106 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 107 deque(deque<Head_, Tail_...>&& seq)
Chris@101 108 : base(std::forward<deque<Head_, Tail_...>>(seq))
Chris@16 109 {}
Chris@16 110 #endif
Chris@16 111
Chris@101 112 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 113 deque(deque const& seq)
Chris@16 114 : base(seq)
Chris@16 115 {}
Chris@16 116
Chris@16 117 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
Chris@101 118 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 119 deque(deque&& seq)
Chris@16 120 : base(std::forward<deque>(seq))
Chris@16 121 {}
Chris@16 122 #endif
Chris@16 123
Chris@101 124 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 125 explicit deque(typename detail::call_param<Head>::type head
Chris@101 126 , typename detail::call_param<Tail>::type... tail)
Chris@16 127 : base(detail::deque_keyed_values<Head, Tail...>::construct(head, tail...))
Chris@16 128 {}
Chris@16 129
Chris@101 130 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
Chris@101 131 template <typename Head_, typename ...Tail_, typename =
Chris@101 132 typename enable_if<is_convertible<Head_, Head> >::type
Chris@101 133 >
Chris@101 134 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@101 135 explicit deque(Head_&& head, Tail_&&... tail)
Chris@101 136 : base(detail::deque_keyed_values<Head, Tail...>
Chris@101 137 ::forward_(BOOST_FUSION_FWD_ELEM(Head_, head), BOOST_FUSION_FWD_ELEM(Tail_, tail)...))
Chris@101 138 {}
Chris@101 139 #else
Chris@101 140 template <typename Head_, typename ...Tail_, typename =
Chris@101 141 typename enable_if<is_convertible<Head_, Head> >::type
Chris@101 142 >
Chris@101 143 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 144 explicit deque(Head_ const& head, Tail_ const&... tail)
Chris@16 145 : base(detail::deque_keyed_values<Head_, Tail_...>::construct(head, tail...))
Chris@16 146 {}
Chris@16 147 #endif
Chris@16 148
Chris@16 149 template <typename Sequence>
Chris@101 150 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 151 explicit deque(Sequence const& seq
Chris@16 152 , typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
Chris@16 153 : base(base::from_iterator(fusion::begin(seq)))
Chris@16 154 {}
Chris@16 155
Chris@16 156 template <typename ...Elements>
Chris@101 157 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 158 deque& operator=(deque<Elements...> const& rhs)
Chris@16 159 {
Chris@16 160 base::operator=(rhs);
Chris@16 161 return *this;
Chris@16 162 }
Chris@16 163
Chris@16 164 template <typename T>
Chris@101 165 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 166 deque& operator=(T const& rhs)
Chris@16 167 {
Chris@16 168 base::operator=(rhs);
Chris@16 169 return *this;
Chris@16 170 }
Chris@16 171
Chris@16 172 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
Chris@16 173 template <typename T>
Chris@101 174 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
Chris@16 175 deque& operator=(T&& rhs)
Chris@16 176 {
Chris@101 177 base::operator=(BOOST_FUSION_FWD_ELEM(T, rhs));
Chris@16 178 return *this;
Chris@16 179 }
Chris@16 180 #endif
Chris@16 181
Chris@16 182 };
Chris@16 183 }}
Chris@16 184
Chris@16 185 #endif
Chris@16 186 #endif