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_PP_FUSION_DEQUE_26112006_1649)
|
Chris@16
|
9 #define BOOST_PP_FUSION_DEQUE_26112006_1649
|
Chris@16
|
10
|
Chris@16
|
11 #if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
|
Chris@16
|
12 #error "C++03 only! This file should not have been included"
|
Chris@16
|
13 #endif
|
Chris@16
|
14
|
Chris@16
|
15 #include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
|
Chris@16
|
16 #include <boost/fusion/container/deque/front_extended_deque.hpp>
|
Chris@16
|
17 #include <boost/fusion/container/deque/back_extended_deque.hpp>
|
Chris@16
|
18 #include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp>
|
Chris@16
|
19 #include <boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp>
|
Chris@16
|
20 #include <boost/fusion/support/sequence_base.hpp>
|
Chris@101
|
21 #include <boost/fusion/support/detail/access.hpp>
|
Chris@16
|
22 #include <boost/fusion/container/deque/detail/keyed_element.hpp>
|
Chris@16
|
23 #include <boost/preprocessor/repetition/enum_params.hpp>
|
Chris@16
|
24 #include <boost/preprocessor/repetition/enum_binary_params.hpp>
|
Chris@16
|
25 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
|
Chris@16
|
26 #include <boost/type_traits/is_convertible.hpp>
|
Chris@16
|
27
|
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/mpl/bool.hpp>
|
Chris@16
|
36
|
Chris@16
|
37 #include <boost/fusion/support/void.hpp>
|
Chris@16
|
38 #include <boost/utility/enable_if.hpp>
|
Chris@16
|
39
|
Chris@16
|
40 #if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
|
Chris@16
|
41 #include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp>
|
Chris@16
|
42 #else
|
Chris@16
|
43 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
Chris@16
|
44 #pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
|
Chris@16
|
45 #endif
|
Chris@16
|
46
|
Chris@16
|
47 /*=============================================================================
|
Chris@16
|
48 Copyright (c) 2001-2011 Joel de Guzman
|
Chris@16
|
49
|
Chris@16
|
50 Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
51 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
52
|
Chris@16
|
53 This is an auto-generated file. Do not edit!
|
Chris@16
|
54 ==============================================================================*/
|
Chris@16
|
55
|
Chris@16
|
56 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
Chris@16
|
57 #pragma wave option(preserve: 1)
|
Chris@16
|
58 #endif
|
Chris@16
|
59
|
Chris@101
|
60 #define FUSION_HASH #
|
Chris@101
|
61
|
Chris@16
|
62 namespace boost { namespace fusion {
|
Chris@16
|
63
|
Chris@16
|
64 struct deque_tag;
|
Chris@16
|
65
|
Chris@16
|
66 template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename T)>
|
Chris@16
|
67 struct deque
|
Chris@16
|
68 :
|
Chris@16
|
69 detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type,
|
Chris@16
|
70 sequence_base<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)> >
|
Chris@16
|
71 {
|
Chris@16
|
72 typedef deque_tag fusion_tag;
|
Chris@16
|
73 typedef bidirectional_traversal_tag category;
|
Chris@16
|
74 typedef typename detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type base;
|
Chris@16
|
75 typedef typename detail::deque_initial_size<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type size;
|
Chris@16
|
76 typedef mpl::int_<size::value> next_up;
|
Chris@101
|
77 typedef mpl::int_<-1> next_down;
|
Chris@16
|
78 typedef mpl::false_ is_view;
|
Chris@16
|
79
|
Chris@16
|
80 #include <boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
|
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 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
87 explicit deque(typename detail::call_param<T0>::type t0)
|
Chris@16
|
88 : base(t0, detail::nil_keyed_element())
|
Chris@16
|
89 {}
|
Chris@16
|
90
|
Chris@101
|
91 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
92 explicit deque(deque const& rhs)
|
Chris@16
|
93 : base(rhs)
|
Chris@16
|
94 {}
|
Chris@16
|
95
|
Chris@16
|
96 template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
Chris@101
|
97 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
98 deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
|
Chris@16
|
99 : base(seq)
|
Chris@16
|
100 {}
|
Chris@16
|
101
|
Chris@16
|
102 template<typename Sequence>
|
Chris@101
|
103 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
104 deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
|
Chris@16
|
105 : base(base::from_iterator(fusion::begin(seq)))
|
Chris@16
|
106 {}
|
Chris@16
|
107
|
Chris@16
|
108 template <BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
Chris@101
|
109 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
110 deque&
|
Chris@16
|
111 operator=(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& rhs)
|
Chris@16
|
112 {
|
Chris@16
|
113 base::operator=(rhs);
|
Chris@16
|
114 return *this;
|
Chris@16
|
115 }
|
Chris@16
|
116
|
Chris@16
|
117 template <typename T>
|
Chris@101
|
118 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
119 deque&
|
Chris@16
|
120 operator=(T const& rhs)
|
Chris@16
|
121 {
|
Chris@16
|
122 base::operator=(rhs);
|
Chris@16
|
123 return *this;
|
Chris@16
|
124 }
|
Chris@16
|
125
|
Chris@101
|
126 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
Chris@101
|
127 FUSION_HASH if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
Chris@101
|
128 #endif
|
Chris@101
|
129 #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
|
Chris@101
|
130 (defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES))
|
Chris@101
|
131 template <typename T0_>
|
Chris@101
|
132 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
133 explicit deque(T0_&& t0
|
Chris@101
|
134 , typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
|
Chris@101
|
135 )
|
Chris@101
|
136 : base(BOOST_FUSION_FWD_ELEM(T0_, t0), detail::nil_keyed_element())
|
Chris@101
|
137 {}
|
Chris@101
|
138 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
139 explicit deque(deque&& rhs)
|
Chris@101
|
140 : base(std::forward<deque>(rhs))
|
Chris@101
|
141 {}
|
Chris@101
|
142 template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
|
Chris@101
|
143 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
144 deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq
|
Chris@101
|
145 , typename disable_if<
|
Chris@101
|
146 is_convertible<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>, T0>
|
Chris@101
|
147 >::type* /*dummy*/ = 0)
|
Chris@101
|
148 : base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
|
Chris@101
|
149 {}
|
Chris@16
|
150 template <typename T>
|
Chris@101
|
151 BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
152 deque&
|
Chris@16
|
153 operator=(T&& rhs)
|
Chris@16
|
154 {
|
Chris@101
|
155 base::operator=(BOOST_FUSION_FWD_ELEM(T, rhs));
|
Chris@16
|
156 return *this;
|
Chris@16
|
157 }
|
Chris@16
|
158 #endif
|
Chris@101
|
159 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
Chris@101
|
160 FUSION_HASH endif
|
Chris@101
|
161 #endif
|
Chris@16
|
162
|
Chris@16
|
163 };
|
Chris@16
|
164
|
Chris@16
|
165 template <>
|
Chris@16
|
166 struct deque<> : detail::nil_keyed_element
|
Chris@16
|
167 {
|
Chris@16
|
168 typedef deque_tag fusion_tag;
|
Chris@16
|
169 typedef bidirectional_traversal_tag category;
|
Chris@16
|
170 typedef mpl::int_<0> size;
|
Chris@16
|
171 typedef mpl::int_<0> next_up;
|
Chris@101
|
172 typedef mpl::int_<-1> next_down;
|
Chris@16
|
173 typedef mpl::false_ is_view;
|
Chris@16
|
174
|
Chris@16
|
175 template <typename Sequence>
|
Chris@101
|
176 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@16
|
177 deque(Sequence const&,
|
Chris@16
|
178 typename enable_if<
|
Chris@16
|
179 mpl::and_<
|
Chris@16
|
180 traits::is_sequence<Sequence>
|
Chris@101
|
181 , result_of::empty<Sequence> > >::type* /*dummy*/ = 0) BOOST_NOEXCEPT
|
Chris@16
|
182 {}
|
Chris@16
|
183
|
Chris@101
|
184 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
Chris@101
|
185 deque() BOOST_NOEXCEPT {}
|
Chris@16
|
186 };
|
Chris@16
|
187
|
Chris@16
|
188 }}
|
Chris@16
|
189
|
Chris@101
|
190 #undef FUSION_HASH
|
Chris@101
|
191
|
Chris@16
|
192 #if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
|
Chris@16
|
193 #pragma wave option(output: null)
|
Chris@16
|
194 #endif
|
Chris@16
|
195
|
Chris@16
|
196 #endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
|
Chris@16
|
197
|
Chris@16
|
198 #endif
|