Chris@16
|
1 ///////////////////////////////////////////////////////////////////////////////
|
Chris@16
|
2 /// \file make_expr_.hpp
|
Chris@16
|
3 /// Contains definition of make_expr_\<\> class template.
|
Chris@16
|
4 //
|
Chris@16
|
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
|
Chris@16
|
6 // Software License, Version 1.0. (See accompanying file
|
Chris@16
|
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 template<typename Tag, typename Domain, typename Sequence, std::size_t Size>
|
Chris@16
|
9 struct unpack_expr_
|
Chris@16
|
10 {};
|
Chris@16
|
11 template<typename Domain, typename Sequence>
|
Chris@16
|
12 struct unpack_expr_<tag::terminal, Domain, Sequence, 1u>
|
Chris@16
|
13 {
|
Chris@16
|
14 typedef
|
Chris@16
|
15 typename add_const<
|
Chris@16
|
16 typename fusion::result_of::value_of<
|
Chris@16
|
17 typename fusion::result_of::begin<Sequence>::type
|
Chris@16
|
18 >::type
|
Chris@16
|
19 >::type
|
Chris@16
|
20 terminal_type;
|
Chris@16
|
21 typedef
|
Chris@16
|
22 typename proto::detail::protoify<
|
Chris@16
|
23 terminal_type
|
Chris@16
|
24 , Domain
|
Chris@16
|
25 >::result_type
|
Chris@16
|
26 type;
|
Chris@16
|
27 BOOST_FORCEINLINE
|
Chris@16
|
28 static type const call(Sequence const &sequence)
|
Chris@16
|
29 {
|
Chris@16
|
30 return proto::detail::protoify<terminal_type, Domain>()(fusion::at_c<0>(sequence));
|
Chris@16
|
31 }
|
Chris@16
|
32 };
|
Chris@16
|
33 template<typename Sequence>
|
Chris@16
|
34 struct unpack_expr_<tag::terminal, deduce_domain, Sequence, 1u>
|
Chris@16
|
35 : unpack_expr_<tag::terminal, default_domain, Sequence, 1u>
|
Chris@16
|
36 {};
|
Chris@16
|
37 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
38 struct unpack_expr_<Tag, Domain, Sequence, 1>
|
Chris@16
|
39 {
|
Chris@16
|
40 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0;
|
Chris@16
|
41 typedef
|
Chris@16
|
42 list1<
|
Chris@16
|
43 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type
|
Chris@16
|
44 >
|
Chris@16
|
45 proto_args;
|
Chris@16
|
46 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
47 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
48 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
49 BOOST_FORCEINLINE
|
Chris@16
|
50 static type const call(Sequence const &sequence)
|
Chris@16
|
51 {
|
Chris@16
|
52 fusion_iterator0 it0 = fusion::begin(sequence);
|
Chris@16
|
53 expr_type const that = {
|
Chris@16
|
54 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0)
|
Chris@16
|
55 };
|
Chris@16
|
56 return proto_generator()(that);
|
Chris@16
|
57 }
|
Chris@16
|
58 };
|
Chris@16
|
59 template<typename Tag, typename Sequence>
|
Chris@16
|
60 struct unpack_expr_<Tag, deduce_domain, Sequence, 1>
|
Chris@16
|
61 {
|
Chris@16
|
62 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0;
|
Chris@16
|
63 typedef
|
Chris@16
|
64 unpack_expr_<
|
Chris@16
|
65 Tag
|
Chris@16
|
66 , typename deduce_domain1<
|
Chris@16
|
67 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type
|
Chris@16
|
68 >::type
|
Chris@16
|
69 , Sequence
|
Chris@16
|
70 , 1
|
Chris@16
|
71 >
|
Chris@16
|
72 other;
|
Chris@16
|
73 typedef typename other::type type;
|
Chris@16
|
74 BOOST_FORCEINLINE
|
Chris@16
|
75 static type const call(Sequence const &sequence)
|
Chris@16
|
76 {
|
Chris@16
|
77 return other::call(sequence);
|
Chris@16
|
78 }
|
Chris@16
|
79 };
|
Chris@16
|
80 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
81 struct unpack_expr_<Tag, Domain, Sequence, 2>
|
Chris@16
|
82 {
|
Chris@16
|
83 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1;
|
Chris@16
|
84 typedef
|
Chris@16
|
85 list2<
|
Chris@16
|
86 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type
|
Chris@16
|
87 >
|
Chris@16
|
88 proto_args;
|
Chris@16
|
89 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
90 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
91 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
92 BOOST_FORCEINLINE
|
Chris@16
|
93 static type const call(Sequence const &sequence)
|
Chris@16
|
94 {
|
Chris@16
|
95 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0);
|
Chris@16
|
96 expr_type const that = {
|
Chris@16
|
97 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1)
|
Chris@16
|
98 };
|
Chris@16
|
99 return proto_generator()(that);
|
Chris@16
|
100 }
|
Chris@16
|
101 };
|
Chris@16
|
102 template<typename Tag, typename Sequence>
|
Chris@16
|
103 struct unpack_expr_<Tag, deduce_domain, Sequence, 2>
|
Chris@16
|
104 {
|
Chris@16
|
105 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1;
|
Chris@16
|
106 typedef
|
Chris@16
|
107 unpack_expr_<
|
Chris@16
|
108 Tag
|
Chris@16
|
109 , typename deduce_domain2<
|
Chris@16
|
110 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type
|
Chris@16
|
111 >::type
|
Chris@16
|
112 , Sequence
|
Chris@16
|
113 , 2
|
Chris@16
|
114 >
|
Chris@16
|
115 other;
|
Chris@16
|
116 typedef typename other::type type;
|
Chris@16
|
117 BOOST_FORCEINLINE
|
Chris@16
|
118 static type const call(Sequence const &sequence)
|
Chris@16
|
119 {
|
Chris@16
|
120 return other::call(sequence);
|
Chris@16
|
121 }
|
Chris@16
|
122 };
|
Chris@16
|
123 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
124 struct unpack_expr_<Tag, Domain, Sequence, 3>
|
Chris@16
|
125 {
|
Chris@16
|
126 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2;
|
Chris@16
|
127 typedef
|
Chris@16
|
128 list3<
|
Chris@16
|
129 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type
|
Chris@16
|
130 >
|
Chris@16
|
131 proto_args;
|
Chris@16
|
132 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
133 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
134 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
135 BOOST_FORCEINLINE
|
Chris@16
|
136 static type const call(Sequence const &sequence)
|
Chris@16
|
137 {
|
Chris@16
|
138 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1);
|
Chris@16
|
139 expr_type const that = {
|
Chris@16
|
140 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2)
|
Chris@16
|
141 };
|
Chris@16
|
142 return proto_generator()(that);
|
Chris@16
|
143 }
|
Chris@16
|
144 };
|
Chris@16
|
145 template<typename Tag, typename Sequence>
|
Chris@16
|
146 struct unpack_expr_<Tag, deduce_domain, Sequence, 3>
|
Chris@16
|
147 {
|
Chris@16
|
148 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2;
|
Chris@16
|
149 typedef
|
Chris@16
|
150 unpack_expr_<
|
Chris@16
|
151 Tag
|
Chris@16
|
152 , typename deduce_domain3<
|
Chris@16
|
153 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type
|
Chris@16
|
154 >::type
|
Chris@16
|
155 , Sequence
|
Chris@16
|
156 , 3
|
Chris@16
|
157 >
|
Chris@16
|
158 other;
|
Chris@16
|
159 typedef typename other::type type;
|
Chris@16
|
160 BOOST_FORCEINLINE
|
Chris@16
|
161 static type const call(Sequence const &sequence)
|
Chris@16
|
162 {
|
Chris@16
|
163 return other::call(sequence);
|
Chris@16
|
164 }
|
Chris@16
|
165 };
|
Chris@16
|
166 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
167 struct unpack_expr_<Tag, Domain, Sequence, 4>
|
Chris@16
|
168 {
|
Chris@16
|
169 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3;
|
Chris@16
|
170 typedef
|
Chris@16
|
171 list4<
|
Chris@16
|
172 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type
|
Chris@16
|
173 >
|
Chris@16
|
174 proto_args;
|
Chris@16
|
175 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
176 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
177 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
178 BOOST_FORCEINLINE
|
Chris@16
|
179 static type const call(Sequence const &sequence)
|
Chris@16
|
180 {
|
Chris@16
|
181 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2);
|
Chris@16
|
182 expr_type const that = {
|
Chris@16
|
183 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3)
|
Chris@16
|
184 };
|
Chris@16
|
185 return proto_generator()(that);
|
Chris@16
|
186 }
|
Chris@16
|
187 };
|
Chris@16
|
188 template<typename Tag, typename Sequence>
|
Chris@16
|
189 struct unpack_expr_<Tag, deduce_domain, Sequence, 4>
|
Chris@16
|
190 {
|
Chris@16
|
191 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3;
|
Chris@16
|
192 typedef
|
Chris@16
|
193 unpack_expr_<
|
Chris@16
|
194 Tag
|
Chris@16
|
195 , typename deduce_domain4<
|
Chris@16
|
196 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type
|
Chris@16
|
197 >::type
|
Chris@16
|
198 , Sequence
|
Chris@16
|
199 , 4
|
Chris@16
|
200 >
|
Chris@16
|
201 other;
|
Chris@16
|
202 typedef typename other::type type;
|
Chris@16
|
203 BOOST_FORCEINLINE
|
Chris@16
|
204 static type const call(Sequence const &sequence)
|
Chris@16
|
205 {
|
Chris@16
|
206 return other::call(sequence);
|
Chris@16
|
207 }
|
Chris@16
|
208 };
|
Chris@16
|
209 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
210 struct unpack_expr_<Tag, Domain, Sequence, 5>
|
Chris@16
|
211 {
|
Chris@16
|
212 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4;
|
Chris@16
|
213 typedef
|
Chris@16
|
214 list5<
|
Chris@16
|
215 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type
|
Chris@16
|
216 >
|
Chris@16
|
217 proto_args;
|
Chris@16
|
218 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
219 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
220 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
221 BOOST_FORCEINLINE
|
Chris@16
|
222 static type const call(Sequence const &sequence)
|
Chris@16
|
223 {
|
Chris@16
|
224 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3);
|
Chris@16
|
225 expr_type const that = {
|
Chris@16
|
226 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4)
|
Chris@16
|
227 };
|
Chris@16
|
228 return proto_generator()(that);
|
Chris@16
|
229 }
|
Chris@16
|
230 };
|
Chris@16
|
231 template<typename Tag, typename Sequence>
|
Chris@16
|
232 struct unpack_expr_<Tag, deduce_domain, Sequence, 5>
|
Chris@16
|
233 {
|
Chris@16
|
234 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4;
|
Chris@16
|
235 typedef
|
Chris@16
|
236 unpack_expr_<
|
Chris@16
|
237 Tag
|
Chris@16
|
238 , typename deduce_domain5<
|
Chris@16
|
239 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type
|
Chris@16
|
240 >::type
|
Chris@16
|
241 , Sequence
|
Chris@16
|
242 , 5
|
Chris@16
|
243 >
|
Chris@16
|
244 other;
|
Chris@16
|
245 typedef typename other::type type;
|
Chris@16
|
246 BOOST_FORCEINLINE
|
Chris@16
|
247 static type const call(Sequence const &sequence)
|
Chris@16
|
248 {
|
Chris@16
|
249 return other::call(sequence);
|
Chris@16
|
250 }
|
Chris@16
|
251 };
|
Chris@16
|
252 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
253 struct unpack_expr_<Tag, Domain, Sequence, 6>
|
Chris@16
|
254 {
|
Chris@16
|
255 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5;
|
Chris@16
|
256 typedef
|
Chris@16
|
257 list6<
|
Chris@16
|
258 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type
|
Chris@16
|
259 >
|
Chris@16
|
260 proto_args;
|
Chris@16
|
261 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
262 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
263 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
264 BOOST_FORCEINLINE
|
Chris@16
|
265 static type const call(Sequence const &sequence)
|
Chris@16
|
266 {
|
Chris@16
|
267 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4);
|
Chris@16
|
268 expr_type const that = {
|
Chris@16
|
269 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5)
|
Chris@16
|
270 };
|
Chris@16
|
271 return proto_generator()(that);
|
Chris@16
|
272 }
|
Chris@16
|
273 };
|
Chris@16
|
274 template<typename Tag, typename Sequence>
|
Chris@16
|
275 struct unpack_expr_<Tag, deduce_domain, Sequence, 6>
|
Chris@16
|
276 {
|
Chris@16
|
277 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5;
|
Chris@16
|
278 typedef
|
Chris@16
|
279 unpack_expr_<
|
Chris@16
|
280 Tag
|
Chris@16
|
281 , typename deduce_domain6<
|
Chris@16
|
282 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type
|
Chris@16
|
283 >::type
|
Chris@16
|
284 , Sequence
|
Chris@16
|
285 , 6
|
Chris@16
|
286 >
|
Chris@16
|
287 other;
|
Chris@16
|
288 typedef typename other::type type;
|
Chris@16
|
289 BOOST_FORCEINLINE
|
Chris@16
|
290 static type const call(Sequence const &sequence)
|
Chris@16
|
291 {
|
Chris@16
|
292 return other::call(sequence);
|
Chris@16
|
293 }
|
Chris@16
|
294 };
|
Chris@16
|
295 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
296 struct unpack_expr_<Tag, Domain, Sequence, 7>
|
Chris@16
|
297 {
|
Chris@16
|
298 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6;
|
Chris@16
|
299 typedef
|
Chris@16
|
300 list7<
|
Chris@16
|
301 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type
|
Chris@16
|
302 >
|
Chris@16
|
303 proto_args;
|
Chris@16
|
304 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
305 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
306 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
307 BOOST_FORCEINLINE
|
Chris@16
|
308 static type const call(Sequence const &sequence)
|
Chris@16
|
309 {
|
Chris@16
|
310 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5);
|
Chris@16
|
311 expr_type const that = {
|
Chris@16
|
312 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6)
|
Chris@16
|
313 };
|
Chris@16
|
314 return proto_generator()(that);
|
Chris@16
|
315 }
|
Chris@16
|
316 };
|
Chris@16
|
317 template<typename Tag, typename Sequence>
|
Chris@16
|
318 struct unpack_expr_<Tag, deduce_domain, Sequence, 7>
|
Chris@16
|
319 {
|
Chris@16
|
320 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6;
|
Chris@16
|
321 typedef
|
Chris@16
|
322 unpack_expr_<
|
Chris@16
|
323 Tag
|
Chris@16
|
324 , typename deduce_domain7<
|
Chris@16
|
325 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type
|
Chris@16
|
326 >::type
|
Chris@16
|
327 , Sequence
|
Chris@16
|
328 , 7
|
Chris@16
|
329 >
|
Chris@16
|
330 other;
|
Chris@16
|
331 typedef typename other::type type;
|
Chris@16
|
332 BOOST_FORCEINLINE
|
Chris@16
|
333 static type const call(Sequence const &sequence)
|
Chris@16
|
334 {
|
Chris@16
|
335 return other::call(sequence);
|
Chris@16
|
336 }
|
Chris@16
|
337 };
|
Chris@16
|
338 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
339 struct unpack_expr_<Tag, Domain, Sequence, 8>
|
Chris@16
|
340 {
|
Chris@16
|
341 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7;
|
Chris@16
|
342 typedef
|
Chris@16
|
343 list8<
|
Chris@16
|
344 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type
|
Chris@16
|
345 >
|
Chris@16
|
346 proto_args;
|
Chris@16
|
347 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
348 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
349 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
350 BOOST_FORCEINLINE
|
Chris@16
|
351 static type const call(Sequence const &sequence)
|
Chris@16
|
352 {
|
Chris@16
|
353 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6);
|
Chris@16
|
354 expr_type const that = {
|
Chris@16
|
355 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7)
|
Chris@16
|
356 };
|
Chris@16
|
357 return proto_generator()(that);
|
Chris@16
|
358 }
|
Chris@16
|
359 };
|
Chris@16
|
360 template<typename Tag, typename Sequence>
|
Chris@16
|
361 struct unpack_expr_<Tag, deduce_domain, Sequence, 8>
|
Chris@16
|
362 {
|
Chris@16
|
363 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7;
|
Chris@16
|
364 typedef
|
Chris@16
|
365 unpack_expr_<
|
Chris@16
|
366 Tag
|
Chris@16
|
367 , typename deduce_domain8<
|
Chris@16
|
368 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type
|
Chris@16
|
369 >::type
|
Chris@16
|
370 , Sequence
|
Chris@16
|
371 , 8
|
Chris@16
|
372 >
|
Chris@16
|
373 other;
|
Chris@16
|
374 typedef typename other::type type;
|
Chris@16
|
375 BOOST_FORCEINLINE
|
Chris@16
|
376 static type const call(Sequence const &sequence)
|
Chris@16
|
377 {
|
Chris@16
|
378 return other::call(sequence);
|
Chris@16
|
379 }
|
Chris@16
|
380 };
|
Chris@16
|
381 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
382 struct unpack_expr_<Tag, Domain, Sequence, 9>
|
Chris@16
|
383 {
|
Chris@16
|
384 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8;
|
Chris@16
|
385 typedef
|
Chris@16
|
386 list9<
|
Chris@16
|
387 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type
|
Chris@16
|
388 >
|
Chris@16
|
389 proto_args;
|
Chris@16
|
390 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
391 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
392 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
393 BOOST_FORCEINLINE
|
Chris@16
|
394 static type const call(Sequence const &sequence)
|
Chris@16
|
395 {
|
Chris@16
|
396 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7);
|
Chris@16
|
397 expr_type const that = {
|
Chris@16
|
398 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8)
|
Chris@16
|
399 };
|
Chris@16
|
400 return proto_generator()(that);
|
Chris@16
|
401 }
|
Chris@16
|
402 };
|
Chris@16
|
403 template<typename Tag, typename Sequence>
|
Chris@16
|
404 struct unpack_expr_<Tag, deduce_domain, Sequence, 9>
|
Chris@16
|
405 {
|
Chris@16
|
406 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8;
|
Chris@16
|
407 typedef
|
Chris@16
|
408 unpack_expr_<
|
Chris@16
|
409 Tag
|
Chris@16
|
410 , typename deduce_domain9<
|
Chris@16
|
411 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type
|
Chris@16
|
412 >::type
|
Chris@16
|
413 , Sequence
|
Chris@16
|
414 , 9
|
Chris@16
|
415 >
|
Chris@16
|
416 other;
|
Chris@16
|
417 typedef typename other::type type;
|
Chris@16
|
418 BOOST_FORCEINLINE
|
Chris@16
|
419 static type const call(Sequence const &sequence)
|
Chris@16
|
420 {
|
Chris@16
|
421 return other::call(sequence);
|
Chris@16
|
422 }
|
Chris@16
|
423 };
|
Chris@16
|
424 template<typename Tag, typename Domain, typename Sequence>
|
Chris@16
|
425 struct unpack_expr_<Tag, Domain, Sequence, 10>
|
Chris@16
|
426 {
|
Chris@16
|
427 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9;
|
Chris@16
|
428 typedef
|
Chris@16
|
429 list10<
|
Chris@16
|
430 typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >::result_type , typename detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >::result_type
|
Chris@16
|
431 >
|
Chris@16
|
432 proto_args;
|
Chris@16
|
433 typedef typename base_expr<Domain, Tag, proto_args>::type expr_type;
|
Chris@16
|
434 typedef typename Domain::proto_generator proto_generator;
|
Chris@16
|
435 typedef typename proto_generator::template result<proto_generator(expr_type)>::type type;
|
Chris@16
|
436 BOOST_FORCEINLINE
|
Chris@16
|
437 static type const call(Sequence const &sequence)
|
Chris@16
|
438 {
|
Chris@16
|
439 fusion_iterator0 it0 = fusion::begin(sequence); fusion_iterator1 it1 = fusion::next(it0); fusion_iterator2 it2 = fusion::next(it1); fusion_iterator3 it3 = fusion::next(it2); fusion_iterator4 it4 = fusion::next(it3); fusion_iterator5 it5 = fusion::next(it4); fusion_iterator6 it6 = fusion::next(it5); fusion_iterator7 it7 = fusion::next(it6); fusion_iterator8 it8 = fusion::next(it7); fusion_iterator9 it9 = fusion::next(it8);
|
Chris@16
|
440 expr_type const that = {
|
Chris@16
|
441 detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , Domain >()(*it0) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , Domain >()(*it1) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , Domain >()(*it2) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , Domain >()(*it3) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , Domain >()(*it4) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , Domain >()(*it5) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , Domain >()(*it6) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , Domain >()(*it7) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , Domain >()(*it8) , detail::protoify< typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type , Domain >()(*it9)
|
Chris@16
|
442 };
|
Chris@16
|
443 return proto_generator()(that);
|
Chris@16
|
444 }
|
Chris@16
|
445 };
|
Chris@16
|
446 template<typename Tag, typename Sequence>
|
Chris@16
|
447 struct unpack_expr_<Tag, deduce_domain, Sequence, 10>
|
Chris@16
|
448 {
|
Chris@16
|
449 typedef typename fusion::result_of::begin<Sequence const>::type fusion_iterator0; typedef typename fusion::result_of::next< fusion_iterator0>::type fusion_iterator1; typedef typename fusion::result_of::next< fusion_iterator1>::type fusion_iterator2; typedef typename fusion::result_of::next< fusion_iterator2>::type fusion_iterator3; typedef typename fusion::result_of::next< fusion_iterator3>::type fusion_iterator4; typedef typename fusion::result_of::next< fusion_iterator4>::type fusion_iterator5; typedef typename fusion::result_of::next< fusion_iterator5>::type fusion_iterator6; typedef typename fusion::result_of::next< fusion_iterator6>::type fusion_iterator7; typedef typename fusion::result_of::next< fusion_iterator7>::type fusion_iterator8; typedef typename fusion::result_of::next< fusion_iterator8>::type fusion_iterator9;
|
Chris@16
|
450 typedef
|
Chris@16
|
451 unpack_expr_<
|
Chris@16
|
452 Tag
|
Chris@16
|
453 , typename deduce_domain10<
|
Chris@16
|
454 typename add_const< typename fusion::result_of::value_of< fusion_iterator0 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator1 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator2 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator3 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator4 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator5 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator6 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator7 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator8 >::type >::type , typename add_const< typename fusion::result_of::value_of< fusion_iterator9 >::type >::type
|
Chris@16
|
455 >::type
|
Chris@16
|
456 , Sequence
|
Chris@16
|
457 , 10
|
Chris@16
|
458 >
|
Chris@16
|
459 other;
|
Chris@16
|
460 typedef typename other::type type;
|
Chris@16
|
461 BOOST_FORCEINLINE
|
Chris@16
|
462 static type const call(Sequence const &sequence)
|
Chris@16
|
463 {
|
Chris@16
|
464 return other::call(sequence);
|
Chris@16
|
465 }
|
Chris@16
|
466 };
|