blob: 904c64f4b709fbfa02e95725a4ae7dd6b95d98dc [file] [log] [blame]
Jeff Thompsona28eed82013-08-22 16:21:10 -07001
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 "ndnboost/mpl/bind.hpp" header
11// -- DO NOT modify by hand!
12
13namespace ndnboost { namespace mpl {
14
15namespace aux {
16template< bool >
17struct 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
29template<>
30struct 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
45template< typename T > struct is_bind_template;
46
47template<
48 typename T, typename U1, typename U2, typename U3, typename U4
49 , typename U5
50 >
51struct resolve_bind_arg
52 : resolve_arg_impl< is_bind_template<T>::value >
53 ::template result_< T,U1,U2,U3,U4,U5 >
54{
55};
56
57template< typename T >
58struct replace_unnamed_arg_impl
59{
60 template< typename Arg > struct result_
61 {
62 typedef Arg next;
63 typedef T type;
64 };
65};
66
67template<>
68struct replace_unnamed_arg_impl< arg< -1 > >
69{
70 template< typename Arg > struct result_
71 {
72 typedef typename next<Arg>::type next;
73 typedef Arg type;
74 };
75};
76
77template< typename T, typename Arg >
78struct replace_unnamed_arg
79 : replace_unnamed_arg_impl<T>::template result_<Arg>
80{
81};
82
83template< int arity_ > struct bind_chooser;
84
85aux::no_tag is_bind_helper(...);
86template< typename T > aux::no_tag is_bind_helper(protect<T>*);
87
88template<
89 typename F, typename T1, typename T2, typename T3, typename T4
90 , typename T5
91 >
92aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
93
94template< int N >
95aux::yes_tag is_bind_helper(arg<N>*);
96
97template< bool is_ref_ = true >
98struct is_bind_template_impl
99{
100 template< typename T > struct result_
101 {
102 BOOST_STATIC_CONSTANT(bool, value = false);
103 };
104};
105
106template<>
107struct is_bind_template_impl<false>
108{
109 template< typename T > struct result_
110 {
111 BOOST_STATIC_CONSTANT(bool, value =
112 sizeof(aux::is_bind_helper(static_cast<T*>(0)))
113 == sizeof(aux::yes_tag)
114 );
115 };
116};
117
118template< typename T > struct is_bind_template
119 : is_bind_template_impl< ::ndnboost::detail::is_reference_impl<T>::value >
120 ::template result_<T>
121{
122};
123
124} // namespace aux
125
126template<
127 typename F
128 >
129struct bind0
130{
131 template<
132 typename U1 = na, typename U2 = na, typename U3 = na
133 , typename U4 = na, typename U5 = na
134 >
135 struct apply
136 {
137 private:
138 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
139 typedef typename r0::type a0;
140 typedef typename r0::next n1;
141 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
142 ///
143 public:
144 typedef typename apply_wrap0<
145 f_
146 >::type type;
147
148 };
149};
150
151namespace aux {
152
153template<
154 typename F
155 >
156aux::yes_tag
157is_bind_helper(bind0<F>*);
158
159} // namespace aux
160
161BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
162BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
163
164namespace aux {
165
166template<>
167struct bind_chooser<0>
168{
169 template<
170 typename F, typename T1, typename T2, typename T3, typename T4
171 , typename T5
172 >
173 struct result_
174 {
175 typedef bind0<F> type;
176 };
177};
178
179} // namespace aux
180
181template<
182 typename F, typename T1
183 >
184struct bind1
185{
186 template<
187 typename U1 = na, typename U2 = na, typename U3 = na
188 , typename U4 = na, typename U5 = na
189 >
190 struct apply
191 {
192 private:
193 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
194 typedef typename r0::type a0;
195 typedef typename r0::next n1;
196 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
197 ///
198 typedef aux::replace_unnamed_arg< T1,n1 > r1;
199 typedef typename r1::type a1;
200 typedef typename r1::next n2;
201 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
202 ///
203 public:
204 typedef typename apply_wrap1<
205 f_
206 , typename t1::type
207 >::type type;
208
209 };
210};
211
212namespace aux {
213
214template<
215 typename F, typename T1
216 >
217aux::yes_tag
218is_bind_helper(bind1< F,T1 >*);
219
220} // namespace aux
221
222BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
223BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
224
225namespace aux {
226
227template<>
228struct bind_chooser<1>
229{
230 template<
231 typename F, typename T1, typename T2, typename T3, typename T4
232 , typename T5
233 >
234 struct result_
235 {
236 typedef bind1< F,T1 > type;
237 };
238};
239
240} // namespace aux
241
242template<
243 typename F, typename T1, typename T2
244 >
245struct bind2
246{
247 template<
248 typename U1 = na, typename U2 = na, typename U3 = na
249 , typename U4 = na, typename U5 = na
250 >
251 struct apply
252 {
253 private:
254 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
255 typedef typename r0::type a0;
256 typedef typename r0::next n1;
257 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
258 ///
259 typedef aux::replace_unnamed_arg< T1,n1 > r1;
260 typedef typename r1::type a1;
261 typedef typename r1::next n2;
262 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
263 ///
264 typedef aux::replace_unnamed_arg< T2,n2 > r2;
265 typedef typename r2::type a2;
266 typedef typename r2::next n3;
267 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
268 ///
269 public:
270 typedef typename apply_wrap2<
271 f_
272 , typename t1::type, typename t2::type
273 >::type type;
274
275 };
276};
277
278namespace aux {
279
280template<
281 typename F, typename T1, typename T2
282 >
283aux::yes_tag
284is_bind_helper(bind2< F,T1,T2 >*);
285
286} // namespace aux
287
288BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
289BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
290
291namespace aux {
292
293template<>
294struct bind_chooser<2>
295{
296 template<
297 typename F, typename T1, typename T2, typename T3, typename T4
298 , typename T5
299 >
300 struct result_
301 {
302 typedef bind2< F,T1,T2 > type;
303 };
304};
305
306} // namespace aux
307
308template<
309 typename F, typename T1, typename T2, typename T3
310 >
311struct bind3
312{
313 template<
314 typename U1 = na, typename U2 = na, typename U3 = na
315 , typename U4 = na, typename U5 = na
316 >
317 struct apply
318 {
319 private:
320 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
321 typedef typename r0::type a0;
322 typedef typename r0::next n1;
323 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
324 ///
325 typedef aux::replace_unnamed_arg< T1,n1 > r1;
326 typedef typename r1::type a1;
327 typedef typename r1::next n2;
328 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
329 ///
330 typedef aux::replace_unnamed_arg< T2,n2 > r2;
331 typedef typename r2::type a2;
332 typedef typename r2::next n3;
333 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
334 ///
335 typedef aux::replace_unnamed_arg< T3,n3 > r3;
336 typedef typename r3::type a3;
337 typedef typename r3::next n4;
338 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
339 ///
340 public:
341 typedef typename apply_wrap3<
342 f_
343 , typename t1::type, typename t2::type, typename t3::type
344 >::type type;
345
346 };
347};
348
349namespace aux {
350
351template<
352 typename F, typename T1, typename T2, typename T3
353 >
354aux::yes_tag
355is_bind_helper(bind3< F,T1,T2,T3 >*);
356
357} // namespace aux
358
359BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
360BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
361
362namespace aux {
363
364template<>
365struct bind_chooser<3>
366{
367 template<
368 typename F, typename T1, typename T2, typename T3, typename T4
369 , typename T5
370 >
371 struct result_
372 {
373 typedef bind3< F,T1,T2,T3 > type;
374 };
375};
376
377} // namespace aux
378
379template<
380 typename F, typename T1, typename T2, typename T3, typename T4
381 >
382struct bind4
383{
384 template<
385 typename U1 = na, typename U2 = na, typename U3 = na
386 , typename U4 = na, typename U5 = na
387 >
388 struct apply
389 {
390 private:
391 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
392 typedef typename r0::type a0;
393 typedef typename r0::next n1;
394 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
395 ///
396 typedef aux::replace_unnamed_arg< T1,n1 > r1;
397 typedef typename r1::type a1;
398 typedef typename r1::next n2;
399 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
400 ///
401 typedef aux::replace_unnamed_arg< T2,n2 > r2;
402 typedef typename r2::type a2;
403 typedef typename r2::next n3;
404 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
405 ///
406 typedef aux::replace_unnamed_arg< T3,n3 > r3;
407 typedef typename r3::type a3;
408 typedef typename r3::next n4;
409 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
410 ///
411 typedef aux::replace_unnamed_arg< T4,n4 > r4;
412 typedef typename r4::type a4;
413 typedef typename r4::next n5;
414 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
415 ///
416 public:
417 typedef typename apply_wrap4<
418 f_
419 , typename t1::type, typename t2::type, typename t3::type
420 , typename t4::type
421 >::type type;
422
423 };
424};
425
426namespace aux {
427
428template<
429 typename F, typename T1, typename T2, typename T3, typename T4
430 >
431aux::yes_tag
432is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
433
434} // namespace aux
435
436BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
437BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
438
439namespace aux {
440
441template<>
442struct bind_chooser<4>
443{
444 template<
445 typename F, typename T1, typename T2, typename T3, typename T4
446 , typename T5
447 >
448 struct result_
449 {
450 typedef bind4< F,T1,T2,T3,T4 > type;
451 };
452};
453
454} // namespace aux
455
456template<
457 typename F, typename T1, typename T2, typename T3, typename T4
458 , typename T5
459 >
460struct bind5
461{
462 template<
463 typename U1 = na, typename U2 = na, typename U3 = na
464 , typename U4 = na, typename U5 = na
465 >
466 struct apply
467 {
468 private:
469 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
470 typedef typename r0::type a0;
471 typedef typename r0::next n1;
472 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
473 ///
474 typedef aux::replace_unnamed_arg< T1,n1 > r1;
475 typedef typename r1::type a1;
476 typedef typename r1::next n2;
477 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
478 ///
479 typedef aux::replace_unnamed_arg< T2,n2 > r2;
480 typedef typename r2::type a2;
481 typedef typename r2::next n3;
482 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
483 ///
484 typedef aux::replace_unnamed_arg< T3,n3 > r3;
485 typedef typename r3::type a3;
486 typedef typename r3::next n4;
487 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
488 ///
489 typedef aux::replace_unnamed_arg< T4,n4 > r4;
490 typedef typename r4::type a4;
491 typedef typename r4::next n5;
492 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
493 ///
494 typedef aux::replace_unnamed_arg< T5,n5 > r5;
495 typedef typename r5::type a5;
496 typedef typename r5::next n6;
497 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
498 ///
499 public:
500 typedef typename apply_wrap5<
501 f_
502 , typename t1::type, typename t2::type, typename t3::type
503 , typename t4::type, typename t5::type
504 >::type type;
505
506 };
507};
508
509namespace aux {
510
511template<
512 typename F, typename T1, typename T2, typename T3, typename T4
513 , typename T5
514 >
515aux::yes_tag
516is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
517
518} // namespace aux
519
520BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
521BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
522
523namespace aux {
524
525template<>
526struct bind_chooser<5>
527{
528 template<
529 typename F, typename T1, typename T2, typename T3, typename T4
530 , typename T5
531 >
532 struct result_
533 {
534 typedef bind5< F,T1,T2,T3,T4,T5 > type;
535 };
536};
537
538} // namespace aux
539
540namespace aux {
541
542template< typename T >
543struct is_bind_arg
544{
545 BOOST_STATIC_CONSTANT(bool, value = true);
546};
547
548template<>
549struct is_bind_arg<na>
550{
551 BOOST_STATIC_CONSTANT(bool, value = false);
552};
553
554template<
555 typename T1, typename T2, typename T3, typename T4, typename T5
556 >
557struct bind_count_args
558{
559 BOOST_STATIC_CONSTANT(int, value =
560 is_bind_arg<T1>::value + is_bind_arg<T2>::value
561 + is_bind_arg<T3>::value + is_bind_arg<T4>::value
562 + is_bind_arg<T5>::value
563 );
564
565};
566
567}
568
569template<
570 typename F, typename T1, typename T2, typename T3, typename T4
571 , typename T5
572 >
573struct bind
574 : aux::bind_chooser<
575 aux::bind_count_args< T1,T2,T3,T4,T5 >::value
576 >::template result_< F,T1,T2,T3,T4,T5 >::type
577{
578};
579
580BOOST_MPL_AUX_ARITY_SPEC(
581 6
582 , bind
583 )
584
585BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
586 6
587 , bind
588 )
589}}
590