1 ///////////////////////////////////////////////////////////////////////////////
3 /// Contains definition of the lazy<> transform.
5 // Copyright 2008 Eric Niebler. Distributed under the Boost
6 // Software License, Version 1.0. (See accompanying file
7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
16 template<typename Object >
18 : transform<lazy<Object()> >
20 template<typename Expr, typename State, typename Data>
23 typename make<Object>::template impl<Expr, State, Data>::result_type
25 >::template impl<Expr, State, Data>
36 template<typename Object , typename A0>
37 struct lazy<Object(A0)>
38 : transform<lazy<Object(A0)> >
40 template<typename Expr, typename State, typename Data>
43 typename make<Object>::template impl<Expr, State, Data>::result_type
45 >::template impl<Expr, State, Data>
48 template<typename Object , typename A0>
49 struct lazy<Object(A0...)>
50 : transform<lazy<Object(A0...)> >
52 template<typename Expr, typename State, typename Data>
55 typename detail::expand_pattern<
56 proto::arity_of<Expr>::value
58 , detail::expand_pattern_rest_0<
63 >::template impl<Expr, State, Data>
74 template<typename Object , typename A0 , typename A1>
75 struct lazy<Object(A0 , A1)>
76 : transform<lazy<Object(A0 , A1)> >
78 template<typename Expr, typename State, typename Data>
81 typename make<Object>::template impl<Expr, State, Data>::result_type
83 >::template impl<Expr, State, Data>
86 template<typename Object , typename A0 , typename A1>
87 struct lazy<Object(A0 , A1...)>
88 : transform<lazy<Object(A0 , A1...)> >
90 template<typename Expr, typename State, typename Data>
93 typename detail::expand_pattern<
94 proto::arity_of<Expr>::value
96 , detail::expand_pattern_rest_1<
101 >::template impl<Expr, State, Data>
112 template<typename Object , typename A0 , typename A1 , typename A2>
113 struct lazy<Object(A0 , A1 , A2)>
114 : transform<lazy<Object(A0 , A1 , A2)> >
116 template<typename Expr, typename State, typename Data>
119 typename make<Object>::template impl<Expr, State, Data>::result_type
121 >::template impl<Expr, State, Data>
124 template<typename Object , typename A0 , typename A1 , typename A2>
125 struct lazy<Object(A0 , A1 , A2...)>
126 : transform<lazy<Object(A0 , A1 , A2...)> >
128 template<typename Expr, typename State, typename Data>
131 typename detail::expand_pattern<
132 proto::arity_of<Expr>::value
134 , detail::expand_pattern_rest_2<
139 >::template impl<Expr, State, Data>
150 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
151 struct lazy<Object(A0 , A1 , A2 , A3)>
152 : transform<lazy<Object(A0 , A1 , A2 , A3)> >
154 template<typename Expr, typename State, typename Data>
157 typename make<Object>::template impl<Expr, State, Data>::result_type
159 >::template impl<Expr, State, Data>
162 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
163 struct lazy<Object(A0 , A1 , A2 , A3...)>
164 : transform<lazy<Object(A0 , A1 , A2 , A3...)> >
166 template<typename Expr, typename State, typename Data>
169 typename detail::expand_pattern<
170 proto::arity_of<Expr>::value
172 , detail::expand_pattern_rest_3<
177 >::template impl<Expr, State, Data>
188 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
189 struct lazy<Object(A0 , A1 , A2 , A3 , A4)>
190 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4)> >
192 template<typename Expr, typename State, typename Data>
195 typename make<Object>::template impl<Expr, State, Data>::result_type
196 (A0 , A1 , A2 , A3 , A4)
197 >::template impl<Expr, State, Data>
200 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
201 struct lazy<Object(A0 , A1 , A2 , A3 , A4...)>
202 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4...)> >
204 template<typename Expr, typename State, typename Data>
207 typename detail::expand_pattern<
208 proto::arity_of<Expr>::value
210 , detail::expand_pattern_rest_4<
215 >::template impl<Expr, State, Data>
226 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
227 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5)>
228 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5)> >
230 template<typename Expr, typename State, typename Data>
233 typename make<Object>::template impl<Expr, State, Data>::result_type
234 (A0 , A1 , A2 , A3 , A4 , A5)
235 >::template impl<Expr, State, Data>
238 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
239 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5...)>
240 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5...)> >
242 template<typename Expr, typename State, typename Data>
245 typename detail::expand_pattern<
246 proto::arity_of<Expr>::value
248 , detail::expand_pattern_rest_5<
250 , A0 , A1 , A2 , A3 , A4
253 >::template impl<Expr, State, Data>
264 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
265 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
266 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
268 template<typename Expr, typename State, typename Data>
271 typename make<Object>::template impl<Expr, State, Data>::result_type
272 (A0 , A1 , A2 , A3 , A4 , A5 , A6)
273 >::template impl<Expr, State, Data>
276 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
277 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)>
278 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)> >
280 template<typename Expr, typename State, typename Data>
283 typename detail::expand_pattern<
284 proto::arity_of<Expr>::value
286 , detail::expand_pattern_rest_6<
288 , A0 , A1 , A2 , A3 , A4 , A5
291 >::template impl<Expr, State, Data>
302 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
303 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
304 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
306 template<typename Expr, typename State, typename Data>
309 typename make<Object>::template impl<Expr, State, Data>::result_type
310 (A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)
311 >::template impl<Expr, State, Data>
314 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
315 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)>
316 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)> >
318 template<typename Expr, typename State, typename Data>
321 typename detail::expand_pattern<
322 proto::arity_of<Expr>::value
324 , detail::expand_pattern_rest_7<
326 , A0 , A1 , A2 , A3 , A4 , A5 , A6
329 >::template impl<Expr, State, Data>
340 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
341 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
342 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
344 template<typename Expr, typename State, typename Data>
347 typename make<Object>::template impl<Expr, State, Data>::result_type
348 (A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)
349 >::template impl<Expr, State, Data>
352 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
353 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)>
354 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)> >
356 template<typename Expr, typename State, typename Data>
359 typename detail::expand_pattern<
360 proto::arity_of<Expr>::value
362 , detail::expand_pattern_rest_8<
364 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
367 >::template impl<Expr, State, Data>
378 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
379 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
380 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)> >
382 template<typename Expr, typename State, typename Data>
385 typename make<Object>::template impl<Expr, State, Data>::result_type
386 (A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)
387 >::template impl<Expr, State, Data>
390 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
391 struct lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)>
392 : transform<lazy<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)> >
394 template<typename Expr, typename State, typename Data>
397 typename detail::expand_pattern<
398 proto::arity_of<Expr>::value
400 , detail::expand_pattern_rest_9<
402 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
405 >::template impl<Expr, State, Data>