]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | |
2 | // Copyright Peter Dimov 2001 | |
3 | // Copyright Aleksey Gurtovoy 2001-2004 | |
4 | // | |
5 | // Distributed under the Boost Software License, Version 1.0. | |
6 | // (See accompanying file LICENSE_1_0.txt or copy at | |
7 | // http://www.boost.org/LICENSE_1_0.txt) | |
8 | // | |
9 | ||
10 | // Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header | |
11 | // -- DO NOT modify by hand! | |
12 | ||
13 | namespace boost { namespace mpl { | |
14 | ||
15 | namespace aux { | |
16 | template< bool > | |
17 | struct resolve_arg_impl | |
18 | { | |
19 | template< | |
20 | typename T, typename U1, typename U2, typename U3 | |
21 | , typename U4, typename U5 | |
22 | > | |
23 | struct result_ | |
24 | { | |
25 | typedef T type; | |
26 | }; | |
27 | }; | |
28 | ||
29 | template<> | |
30 | struct resolve_arg_impl<true> | |
31 | { | |
32 | template< | |
33 | typename T, typename U1, typename U2, typename U3 | |
34 | , typename U4, typename U5 | |
35 | > | |
36 | struct result_ | |
37 | { | |
38 | typedef typename apply_wrap5< | |
39 | T | |
40 | , U1, U2, U3, U4, U5 | |
41 | >::type type; | |
42 | }; | |
43 | }; | |
44 | ||
45 | template< typename T > struct is_bind_template; | |
46 | ||
47 | template< | |
48 | typename T, typename U1, typename U2, typename U3, typename U4 | |
49 | , typename U5 | |
50 | > | |
51 | struct resolve_bind_arg | |
52 | : resolve_arg_impl< is_bind_template<T>::value > | |
53 | ::template result_< T,U1,U2,U3,U4,U5 > | |
54 | { | |
55 | }; | |
56 | ||
57 | template< int arity_ > struct bind_chooser; | |
58 | ||
59 | aux::no_tag is_bind_helper(...); | |
60 | template< typename T > aux::no_tag is_bind_helper(protect<T>*); | |
61 | ||
62 | template< | |
63 | typename F, typename T1, typename T2, typename T3, typename T4 | |
64 | , typename T5 | |
65 | > | |
66 | aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*); | |
67 | ||
68 | template< int N > | |
69 | aux::yes_tag is_bind_helper(arg<N>*); | |
70 | ||
71 | template< bool is_ref_ = true > | |
72 | struct is_bind_template_impl | |
73 | { | |
74 | template< typename T > struct result_ | |
75 | { | |
76 | BOOST_STATIC_CONSTANT(bool, value = false); | |
77 | }; | |
78 | }; | |
79 | ||
80 | template<> | |
81 | struct is_bind_template_impl<false> | |
82 | { | |
83 | template< typename T > struct result_ | |
84 | { | |
85 | BOOST_STATIC_CONSTANT(bool, value = | |
86 | sizeof(aux::is_bind_helper(static_cast<T*>(0))) | |
87 | == sizeof(aux::yes_tag) | |
88 | ); | |
89 | }; | |
90 | }; | |
91 | ||
92 | template< typename T > struct is_bind_template | |
93 | : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value > | |
94 | ::template result_<T> | |
95 | { | |
96 | }; | |
97 | ||
98 | } // namespace aux | |
99 | ||
100 | template< | |
101 | typename F | |
102 | > | |
103 | struct bind0 | |
104 | { | |
105 | template< | |
106 | typename U1 = na, typename U2 = na, typename U3 = na | |
107 | , typename U4 = na, typename U5 = na | |
108 | > | |
109 | struct apply | |
110 | { | |
111 | private: | |
112 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
113 | ||
114 | public: | |
115 | typedef typename apply_wrap0< | |
116 | f_ | |
117 | >::type type; | |
118 | ||
119 | }; | |
120 | }; | |
121 | ||
122 | namespace aux { | |
123 | ||
124 | template< | |
125 | typename F | |
126 | > | |
127 | aux::yes_tag | |
128 | is_bind_helper(bind0<F>*); | |
129 | ||
130 | } // namespace aux | |
131 | ||
132 | BOOST_MPL_AUX_ARITY_SPEC(1, bind0) | |
133 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) | |
134 | ||
135 | namespace aux { | |
136 | ||
137 | template<> | |
138 | struct bind_chooser<0> | |
139 | { | |
140 | template< | |
141 | typename F, typename T1, typename T2, typename T3, typename T4 | |
142 | , typename T5 | |
143 | > | |
144 | struct result_ | |
145 | { | |
146 | typedef bind0<F> type; | |
147 | }; | |
148 | }; | |
149 | ||
150 | } // namespace aux | |
151 | ||
152 | template< | |
153 | typename F, typename T1 | |
154 | > | |
155 | struct bind1 | |
156 | { | |
157 | template< | |
158 | typename U1 = na, typename U2 = na, typename U3 = na | |
159 | , typename U4 = na, typename U5 = na | |
160 | > | |
161 | struct apply | |
162 | { | |
163 | private: | |
164 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
165 | typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; | |
166 | ||
167 | public: | |
168 | typedef typename apply_wrap1< | |
169 | f_ | |
170 | , typename t1::type | |
171 | >::type type; | |
172 | ||
173 | }; | |
174 | }; | |
175 | ||
176 | namespace aux { | |
177 | ||
178 | template< | |
179 | typename F, typename T1 | |
180 | > | |
181 | aux::yes_tag | |
182 | is_bind_helper(bind1< F,T1 >*); | |
183 | ||
184 | } // namespace aux | |
185 | ||
186 | BOOST_MPL_AUX_ARITY_SPEC(2, bind1) | |
187 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) | |
188 | ||
189 | namespace aux { | |
190 | ||
191 | template<> | |
192 | struct bind_chooser<1> | |
193 | { | |
194 | template< | |
195 | typename F, typename T1, typename T2, typename T3, typename T4 | |
196 | , typename T5 | |
197 | > | |
198 | struct result_ | |
199 | { | |
200 | typedef bind1< F,T1 > type; | |
201 | }; | |
202 | }; | |
203 | ||
204 | } // namespace aux | |
205 | ||
206 | template< | |
207 | typename F, typename T1, typename T2 | |
208 | > | |
209 | struct bind2 | |
210 | { | |
211 | template< | |
212 | typename U1 = na, typename U2 = na, typename U3 = na | |
213 | , typename U4 = na, typename U5 = na | |
214 | > | |
215 | struct apply | |
216 | { | |
217 | private: | |
218 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
219 | typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; | |
220 | typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; | |
221 | ||
222 | public: | |
223 | typedef typename apply_wrap2< | |
224 | f_ | |
225 | , typename t1::type, typename t2::type | |
226 | >::type type; | |
227 | ||
228 | }; | |
229 | }; | |
230 | ||
231 | namespace aux { | |
232 | ||
233 | template< | |
234 | typename F, typename T1, typename T2 | |
235 | > | |
236 | aux::yes_tag | |
237 | is_bind_helper(bind2< F,T1,T2 >*); | |
238 | ||
239 | } // namespace aux | |
240 | ||
241 | BOOST_MPL_AUX_ARITY_SPEC(3, bind2) | |
242 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) | |
243 | ||
244 | namespace aux { | |
245 | ||
246 | template<> | |
247 | struct bind_chooser<2> | |
248 | { | |
249 | template< | |
250 | typename F, typename T1, typename T2, typename T3, typename T4 | |
251 | , typename T5 | |
252 | > | |
253 | struct result_ | |
254 | { | |
255 | typedef bind2< F,T1,T2 > type; | |
256 | }; | |
257 | }; | |
258 | ||
259 | } // namespace aux | |
260 | ||
261 | template< | |
262 | typename F, typename T1, typename T2, typename T3 | |
263 | > | |
264 | struct bind3 | |
265 | { | |
266 | template< | |
267 | typename U1 = na, typename U2 = na, typename U3 = na | |
268 | , typename U4 = na, typename U5 = na | |
269 | > | |
270 | struct apply | |
271 | { | |
272 | private: | |
273 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
274 | typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; | |
275 | typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; | |
276 | typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; | |
277 | ||
278 | public: | |
279 | typedef typename apply_wrap3< | |
280 | f_ | |
281 | , typename t1::type, typename t2::type, typename t3::type | |
282 | >::type type; | |
283 | ||
284 | }; | |
285 | }; | |
286 | ||
287 | namespace aux { | |
288 | ||
289 | template< | |
290 | typename F, typename T1, typename T2, typename T3 | |
291 | > | |
292 | aux::yes_tag | |
293 | is_bind_helper(bind3< F,T1,T2,T3 >*); | |
294 | ||
295 | } // namespace aux | |
296 | ||
297 | BOOST_MPL_AUX_ARITY_SPEC(4, bind3) | |
298 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) | |
299 | ||
300 | namespace aux { | |
301 | ||
302 | template<> | |
303 | struct bind_chooser<3> | |
304 | { | |
305 | template< | |
306 | typename F, typename T1, typename T2, typename T3, typename T4 | |
307 | , typename T5 | |
308 | > | |
309 | struct result_ | |
310 | { | |
311 | typedef bind3< F,T1,T2,T3 > type; | |
312 | }; | |
313 | }; | |
314 | ||
315 | } // namespace aux | |
316 | ||
317 | template< | |
318 | typename F, typename T1, typename T2, typename T3, typename T4 | |
319 | > | |
320 | struct bind4 | |
321 | { | |
322 | template< | |
323 | typename U1 = na, typename U2 = na, typename U3 = na | |
324 | , typename U4 = na, typename U5 = na | |
325 | > | |
326 | struct apply | |
327 | { | |
328 | private: | |
329 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
330 | typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; | |
331 | typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; | |
332 | typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; | |
333 | typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; | |
334 | ||
335 | public: | |
336 | typedef typename apply_wrap4< | |
337 | f_ | |
338 | , typename t1::type, typename t2::type, typename t3::type | |
339 | , typename t4::type | |
340 | >::type type; | |
341 | ||
342 | }; | |
343 | }; | |
344 | ||
345 | namespace aux { | |
346 | ||
347 | template< | |
348 | typename F, typename T1, typename T2, typename T3, typename T4 | |
349 | > | |
350 | aux::yes_tag | |
351 | is_bind_helper(bind4< F,T1,T2,T3,T4 >*); | |
352 | ||
353 | } // namespace aux | |
354 | ||
355 | BOOST_MPL_AUX_ARITY_SPEC(5, bind4) | |
356 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) | |
357 | ||
358 | namespace aux { | |
359 | ||
360 | template<> | |
361 | struct bind_chooser<4> | |
362 | { | |
363 | template< | |
364 | typename F, typename T1, typename T2, typename T3, typename T4 | |
365 | , typename T5 | |
366 | > | |
367 | struct result_ | |
368 | { | |
369 | typedef bind4< F,T1,T2,T3,T4 > type; | |
370 | }; | |
371 | }; | |
372 | ||
373 | } // namespace aux | |
374 | ||
375 | template< | |
376 | typename F, typename T1, typename T2, typename T3, typename T4 | |
377 | , typename T5 | |
378 | > | |
379 | struct bind5 | |
380 | { | |
381 | template< | |
382 | typename U1 = na, typename U2 = na, typename U3 = na | |
383 | , typename U4 = na, typename U5 = na | |
384 | > | |
385 | struct apply | |
386 | { | |
387 | private: | |
388 | typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_; | |
389 | typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1; | |
390 | typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2; | |
391 | typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3; | |
392 | typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4; | |
393 | typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5; | |
394 | ||
395 | public: | |
396 | typedef typename apply_wrap5< | |
397 | f_ | |
398 | , typename t1::type, typename t2::type, typename t3::type | |
399 | , typename t4::type, typename t5::type | |
400 | >::type type; | |
401 | ||
402 | }; | |
403 | }; | |
404 | ||
405 | namespace aux { | |
406 | ||
407 | template< | |
408 | typename F, typename T1, typename T2, typename T3, typename T4 | |
409 | , typename T5 | |
410 | > | |
411 | aux::yes_tag | |
412 | is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*); | |
413 | ||
414 | } // namespace aux | |
415 | ||
416 | BOOST_MPL_AUX_ARITY_SPEC(6, bind5) | |
417 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) | |
418 | ||
419 | namespace aux { | |
420 | ||
421 | template<> | |
422 | struct bind_chooser<5> | |
423 | { | |
424 | template< | |
425 | typename F, typename T1, typename T2, typename T3, typename T4 | |
426 | , typename T5 | |
427 | > | |
428 | struct result_ | |
429 | { | |
430 | typedef bind5< F,T1,T2,T3,T4,T5 > type; | |
431 | }; | |
432 | }; | |
433 | ||
434 | } // namespace aux | |
435 | ||
436 | namespace aux { | |
437 | ||
438 | template< typename T > | |
439 | struct is_bind_arg | |
440 | { | |
441 | BOOST_STATIC_CONSTANT(bool, value = true); | |
442 | }; | |
443 | ||
444 | template<> | |
445 | struct is_bind_arg<na> | |
446 | { | |
447 | BOOST_STATIC_CONSTANT(bool, value = false); | |
448 | }; | |
449 | ||
450 | template< | |
451 | typename T1, typename T2, typename T3, typename T4, typename T5 | |
452 | > | |
453 | struct bind_count_args | |
454 | { | |
455 | BOOST_STATIC_CONSTANT(int, value = | |
456 | is_bind_arg<T1>::value + is_bind_arg<T2>::value | |
457 | + is_bind_arg<T3>::value + is_bind_arg<T4>::value | |
458 | + is_bind_arg<T5>::value | |
459 | ); | |
460 | ||
461 | }; | |
462 | ||
463 | } | |
464 | ||
465 | template< | |
466 | typename F, typename T1, typename T2, typename T3, typename T4 | |
467 | , typename T5 | |
468 | > | |
469 | struct bind | |
470 | : aux::bind_chooser< | |
471 | aux::bind_count_args< T1,T2,T3,T4,T5 >::value | |
472 | >::template result_< F,T1,T2,T3,T4,T5 >::type | |
473 | { | |
474 | }; | |
475 | ||
476 | BOOST_MPL_AUX_ARITY_SPEC( | |
477 | 6 | |
478 | , bind | |
479 | ) | |
480 | ||
481 | BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC( | |
482 | 6 | |
483 | , bind | |
484 | ) | |
485 | }} | |
486 |