1 /*=============================================================================
3 Copyright (c) 2002 Joel de Guzman
4 Copyright (c) 2002-2003 Hartmut Kaiser
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 ==============================================================================*/
9 #ifndef PHOENIX_TUPLEHELPERS_HPP
10 #define PHOENIX_TUPLEHELPERS_HPP
12 ///////////////////////////////////////////////////////////////////////////////
14 #include <boost/spirit/home/classic/phoenix/tuples.hpp>
16 ///////////////////////////////////////////////////////////////////////////////
20 ///////////////////////////////////////////////////////////////////////////////
22 // make_tuple template class
24 // This template class is used to calculate a tuple type required to hold
25 // the given template parameter type
27 ///////////////////////////////////////////////////////////////////////////////
29 ///////////////////////////////////////////////////////////////////////////////
30 // normal (non-tuple types are wrapped into a tuple)
31 template <typename ResultT>
34 typedef tuple<ResultT> type;
37 ///////////////////////////////////////////////////////////////////////////////
38 // nil_t is converted to an empty tuple type
40 struct make_tuple<nil_t> {
45 ///////////////////////////////////////////////////////////////////////////////
46 // tuple types are left alone without any refactoring
48 typename A, typename B, typename C
50 , typename D, typename E, typename F
52 , typename G, typename H, typename I
54 , typename J, typename K, typename L
55 #if PHOENIX_LIMIT > 12
56 , typename M, typename N, typename O
62 struct make_tuple<tuple<A, B, C
69 #if PHOENIX_LIMIT > 12
77 // the tuple parameter itself is the required tuple type
85 #if PHOENIX_LIMIT > 12
94 ///////////////////////////////////////////////////////////////////////////////
96 // concat_tuple type computer
98 // This class returns the type of a tuple, which is constructed by
99 // concatenating a tuple with a given type
101 ///////////////////////////////////////////////////////////////////////////////
102 template <typename TupleT, typename AppendT>
105 ///////////////////////////////////////////////////////////////////////////////
107 // concat tuple <0 member> class
109 ///////////////////////////////////////////////////////////////////////////////
110 template <typename AppendT>
111 struct concat_tuple<tuple<>, AppendT> {
113 typedef tuple<AppendT> type;
117 struct concat_tuple<tuple<>, nil_t> {
119 typedef tuple<> type;
122 ///////////////////////////////////////////////////////////////////////////////
124 // concat tuple <1 member> class
126 ///////////////////////////////////////////////////////////////////////////////
127 template <typename A, typename AppendT>
128 struct concat_tuple<tuple<A>, AppendT> {
130 typedef tuple<A, AppendT> type;
133 template <typename A>
134 struct concat_tuple<tuple<A>, nil_t> {
136 typedef tuple<A> type;
139 ///////////////////////////////////////////////////////////////////////////////
141 // concat tuple <2 member> class
143 ///////////////////////////////////////////////////////////////////////////////
144 template <typename A, typename B, typename AppendT>
145 struct concat_tuple<tuple<A, B>, AppendT> {
147 typedef tuple<A, B, AppendT> type;
150 template <typename A, typename B>
151 struct concat_tuple<tuple<A, B>, nil_t> {
153 typedef tuple<A, B> type;
156 #if PHOENIX_LIMIT > 3
157 ///////////////////////////////////////////////////////////////////////////////
159 // concat tuple <3 member> class
161 ///////////////////////////////////////////////////////////////////////////////
163 typename A, typename B, typename C,
166 struct concat_tuple<tuple<A, B, C>, AppendT> {
168 typedef tuple<A, B, C, AppendT> type;
172 typename A, typename B, typename C
174 struct concat_tuple<tuple<A, B, C>, nil_t> {
176 typedef tuple<A, B, C> type;
179 ///////////////////////////////////////////////////////////////////////////////
181 // concat tuple <4 member> class
183 ///////////////////////////////////////////////////////////////////////////////
185 typename A, typename B, typename C, typename D,
188 struct concat_tuple<tuple<A, B, C, D>, AppendT> {
190 typedef tuple<A, B, C, D, AppendT> type;
194 typename A, typename B, typename C, typename D
196 struct concat_tuple<tuple<A, B, C, D>, nil_t> {
198 typedef tuple<A, B, C, D> type;
201 ///////////////////////////////////////////////////////////////////////////////
203 // concat tuple <5 member> class
205 ///////////////////////////////////////////////////////////////////////////////
207 typename A, typename B, typename C, typename D, typename E,
210 struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
212 typedef tuple<A, B, C, D, E, AppendT> type;
216 typename A, typename B, typename C, typename D, typename E
218 struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
220 typedef tuple<A, B, C, D, E> type;
223 #if PHOENIX_LIMIT > 6
224 ///////////////////////////////////////////////////////////////////////////////
226 // concat tuple <6 member> class
228 ///////////////////////////////////////////////////////////////////////////////
230 typename A, typename B, typename C, typename D, typename E, typename F,
233 struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
235 typedef tuple<A, B, C, D, E, F, AppendT> type;
239 typename A, typename B, typename C, typename D, typename E, typename F
241 struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
243 typedef tuple<A, B, C, D, E, F> type;
246 ///////////////////////////////////////////////////////////////////////////////
248 // concat tuple <7 member> class
250 ///////////////////////////////////////////////////////////////////////////////
252 typename A, typename B, typename C, typename D, typename E, typename F,
256 struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
258 typedef tuple<A, B, C, D, E, F, G, AppendT> type;
262 typename A, typename B, typename C, typename D, typename E, typename F,
265 struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
267 typedef tuple<A, B, C, D, E, F, G> type;
270 ///////////////////////////////////////////////////////////////////////////////
272 // concat tuple <8 member> class
274 ///////////////////////////////////////////////////////////////////////////////
276 typename A, typename B, typename C, typename D, typename E, typename F,
277 typename G, typename H,
280 struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
282 typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
286 typename A, typename B, typename C, typename D, typename E, typename F,
287 typename G, typename H
289 struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
291 typedef tuple<A, B, C, D, E, F, G, H> type;
294 #if PHOENIX_LIMIT > 9
295 ///////////////////////////////////////////////////////////////////////////////
297 // concat tuple <9 member> class
299 ///////////////////////////////////////////////////////////////////////////////
301 typename A, typename B, typename C, typename D, typename E, typename F,
302 typename G, typename H, typename I,
305 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
307 typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
311 typename A, typename B, typename C, typename D, typename E, typename F,
312 typename G, typename H, typename I
314 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
316 typedef tuple<A, B, C, D, E, F, G, H, I> type;
319 ///////////////////////////////////////////////////////////////////////////////
321 // concat tuple <10 member> class
323 ///////////////////////////////////////////////////////////////////////////////
325 typename A, typename B, typename C, typename D, typename E, typename F,
326 typename G, typename H, typename I, typename J,
329 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
331 typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
335 typename A, typename B, typename C, typename D, typename E, typename F,
336 typename G, typename H, typename I, typename J
338 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
340 typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
343 ///////////////////////////////////////////////////////////////////////////////
345 // concat tuple <11 member> class
347 ///////////////////////////////////////////////////////////////////////////////
349 typename A, typename B, typename C, typename D, typename E, typename F,
350 typename G, typename H, typename I, typename J, typename K,
353 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
355 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
359 typename A, typename B, typename C, typename D, typename E, typename F,
360 typename G, typename H, typename I, typename J, typename K
362 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
364 typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
367 #if PHOENIX_LIMIT > 12
368 ///////////////////////////////////////////////////////////////////////////////
370 // concat tuple <12 member> class
372 ///////////////////////////////////////////////////////////////////////////////
374 typename A, typename B, typename C, typename D, typename E, typename F,
375 typename G, typename H, typename I, typename J, typename K, typename L,
378 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
380 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
384 typename A, typename B, typename C, typename D, typename E, typename F,
385 typename G, typename H, typename I, typename J, typename K, typename L
387 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
389 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
392 ///////////////////////////////////////////////////////////////////////////////
394 // concat tuple <13 member> class
396 ///////////////////////////////////////////////////////////////////////////////
398 typename A, typename B, typename C, typename D, typename E, typename F,
399 typename G, typename H, typename I, typename J, typename K, typename L,
403 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
405 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
409 typename A, typename B, typename C, typename D, typename E, typename F,
410 typename G, typename H, typename I, typename J, typename K, typename L,
413 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
415 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
418 ///////////////////////////////////////////////////////////////////////////////
420 // concat tuple <14 member> class
422 ///////////////////////////////////////////////////////////////////////////////
424 typename A, typename B, typename C, typename D, typename E, typename F,
425 typename G, typename H, typename I, typename J, typename K, typename L,
426 typename M, typename N,
429 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
431 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
435 typename A, typename B, typename C, typename D, typename E, typename F,
436 typename G, typename H, typename I, typename J, typename K, typename L,
437 typename M, typename N
439 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
441 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
449 ///////////////////////////////////////////////////////////////////////////////
451 // concat_tuples type computer
453 // This template class returns the type of a tuple built from the
454 // concatenation of two given tuples.
456 ///////////////////////////////////////////////////////////////////////////////
457 template <typename TupleT1, typename TupleT2, int N, typename AppendT>
458 struct concat_tuple_element {
461 typename concat_tuple_element<
462 typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
463 typename tuple_element<N+1, TupleT2>::type
468 template <typename TupleT1, typename TupleT2, int N>
469 struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
471 typedef TupleT1 type;
474 template <typename TupleT1, typename TupleT2>
475 struct concat_tuples {
478 typename concat_tuple_element<
480 typename tuple_element<0, TupleT2>::type
485 ///////////////////////////////////////////////////////////////////////////////
487 // convert_actors template function
489 // The convert_actors template functions constructs a new tuple object
490 // composed of the elements returned by the actors contained in the
491 // input tuple. (i.e. the given tuple type 'actor_tuple' contains a set
492 // of actors to evaluate and the resulting tuple contains the results of
493 // evaluating the actors.)
495 ///////////////////////////////////////////////////////////////////////////////
496 template <typename ActorT, typename TupleT>
497 struct actor_result; // forward declaration
501 template <unsigned N>
502 struct convert_actors_ {};
505 template <typename TupleResultT, typename ActorTupleT>
507 convert_actors(ActorTupleT const& actor_tuple)
509 BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
510 BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
511 return impl::convert_actors_<length>
512 ::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
517 template <int N, typename TupleResultT, typename ActorTupleT>
520 typedef typename tuple_element<N, TupleResultT>::type type;
523 struct is_default_t {};
524 typedef is_default_t<true> is_default;
525 typedef is_default_t<false> is_not_default;
528 actor_element(ActorTupleT const& /*actor_tuple*/, is_default)
530 return type(); // default construct
534 actor_element(ActorTupleT const& actor_tuple, is_not_default)
536 BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
537 return actor_tuple[tuple_index<N>()](); // apply the actor
541 do_(ActorTupleT const& actor_tuple)
543 return actor_element(
544 actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
548 ///////////////////////////////////////
550 struct convert_actors_<1>
552 template <typename TupleResultT, typename ActorTupleT>
556 do_(ActorTupleT const& actor_tuple)
558 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
561 converter0::do_(actor_tuple)
567 ///////////////////////////////////////
569 struct convert_actors_<2>
571 template <typename TupleResultT, typename ActorTupleT>
575 do_(ActorTupleT const& actor_tuple)
577 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
578 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
580 using namespace tuple_index_names;
582 converter0::do_(actor_tuple)
583 , converter1::do_(actor_tuple)
589 ///////////////////////////////////////
591 struct convert_actors_<3>
593 template <typename TupleResultT, typename ActorTupleT>
597 do_(ActorTupleT const& actor_tuple)
599 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
600 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
601 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
603 using namespace tuple_index_names;
605 converter0::do_(actor_tuple)
606 , converter1::do_(actor_tuple)
607 , converter2::do_(actor_tuple)
613 #if PHOENIX_LIMIT > 3
615 /////////////////////////////////////
617 struct convert_actors_<4>
619 template <typename TupleResultT, typename ActorTupleT>
623 do_(ActorTupleT const& actor_tuple)
625 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
626 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
627 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
628 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
630 using namespace tuple_index_names;
632 converter0::do_(actor_tuple)
633 , converter1::do_(actor_tuple)
634 , converter2::do_(actor_tuple)
635 , converter3::do_(actor_tuple)
641 /////////////////////////////////////
643 struct convert_actors_<5>
645 template <typename TupleResultT, typename ActorTupleT>
649 do_(ActorTupleT const& actor_tuple)
651 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
652 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
653 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
654 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
655 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
657 using namespace tuple_index_names;
659 converter0::do_(actor_tuple)
660 , converter1::do_(actor_tuple)
661 , converter2::do_(actor_tuple)
662 , converter3::do_(actor_tuple)
663 , converter4::do_(actor_tuple)
669 /////////////////////////////////////
671 struct convert_actors_<6>
673 template <typename TupleResultT, typename ActorTupleT>
677 do_(ActorTupleT const& actor_tuple)
679 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
680 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
681 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
682 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
683 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
684 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
686 using namespace tuple_index_names;
688 converter0::do_(actor_tuple)
689 , converter1::do_(actor_tuple)
690 , converter2::do_(actor_tuple)
691 , converter3::do_(actor_tuple)
692 , converter4::do_(actor_tuple)
693 , converter5::do_(actor_tuple)
699 #if PHOENIX_LIMIT > 6
701 /////////////////////////////////////
703 struct convert_actors_<7>
705 template <typename TupleResultT, typename ActorTupleT>
709 do_(ActorTupleT const& actor_tuple)
711 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
712 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
713 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
714 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
715 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
716 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
717 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
719 using namespace tuple_index_names;
721 converter0::do_(actor_tuple)
722 , converter1::do_(actor_tuple)
723 , converter2::do_(actor_tuple)
724 , converter3::do_(actor_tuple)
725 , converter4::do_(actor_tuple)
726 , converter5::do_(actor_tuple)
727 , converter6::do_(actor_tuple)
733 /////////////////////////////////////
735 struct convert_actors_<8>
737 template <typename TupleResultT, typename ActorTupleT>
741 do_(ActorTupleT const& actor_tuple)
743 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
744 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
745 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
746 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
747 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
748 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
749 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
750 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
752 using namespace tuple_index_names;
754 converter0::do_(actor_tuple)
755 , converter1::do_(actor_tuple)
756 , converter2::do_(actor_tuple)
757 , converter3::do_(actor_tuple)
758 , converter4::do_(actor_tuple)
759 , converter5::do_(actor_tuple)
760 , converter6::do_(actor_tuple)
761 , converter7::do_(actor_tuple)
767 /////////////////////////////////////
769 struct convert_actors_<9>
771 template <typename TupleResultT, typename ActorTupleT>
775 do_(ActorTupleT const& actor_tuple)
777 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
778 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
779 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
780 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
781 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
782 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
783 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
784 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
785 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
787 using namespace tuple_index_names;
789 converter0::do_(actor_tuple)
790 , converter1::do_(actor_tuple)
791 , converter2::do_(actor_tuple)
792 , converter3::do_(actor_tuple)
793 , converter4::do_(actor_tuple)
794 , converter5::do_(actor_tuple)
795 , converter6::do_(actor_tuple)
796 , converter7::do_(actor_tuple)
797 , converter8::do_(actor_tuple)
803 #if PHOENIX_LIMIT > 9
805 /////////////////////////////////////
807 struct convert_actors_<10>
809 template <typename TupleResultT, typename ActorTupleT>
813 do_(ActorTupleT const& actor_tuple)
815 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
816 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
817 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
818 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
819 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
820 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
821 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
822 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
823 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
824 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
826 using namespace tuple_index_names;
828 converter0::do_(actor_tuple)
829 , converter1::do_(actor_tuple)
830 , converter2::do_(actor_tuple)
831 , converter3::do_(actor_tuple)
832 , converter4::do_(actor_tuple)
833 , converter5::do_(actor_tuple)
834 , converter6::do_(actor_tuple)
835 , converter7::do_(actor_tuple)
836 , converter8::do_(actor_tuple)
837 , converter9::do_(actor_tuple)
843 /////////////////////////////////////
845 struct convert_actors_<11>
847 template <typename TupleResultT, typename ActorTupleT>
851 do_(ActorTupleT const& actor_tuple)
853 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
854 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
855 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
856 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
857 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
858 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
859 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
860 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
861 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
862 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
863 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
865 using namespace tuple_index_names;
867 converter0::do_(actor_tuple)
868 , converter1::do_(actor_tuple)
869 , converter2::do_(actor_tuple)
870 , converter3::do_(actor_tuple)
871 , converter4::do_(actor_tuple)
872 , converter5::do_(actor_tuple)
873 , converter6::do_(actor_tuple)
874 , converter7::do_(actor_tuple)
875 , converter8::do_(actor_tuple)
876 , converter9::do_(actor_tuple)
877 , converter10::do_(actor_tuple)
883 /////////////////////////////////////
885 struct convert_actors_<12>
887 template <typename TupleResultT, typename ActorTupleT>
891 do_(ActorTupleT const& actor_tuple)
893 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
894 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
895 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
896 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
897 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
898 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
899 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
900 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
901 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
902 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
903 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
904 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
906 using namespace tuple_index_names;
908 converter0::do_(actor_tuple)
909 , converter1::do_(actor_tuple)
910 , converter2::do_(actor_tuple)
911 , converter3::do_(actor_tuple)
912 , converter4::do_(actor_tuple)
913 , converter5::do_(actor_tuple)
914 , converter6::do_(actor_tuple)
915 , converter7::do_(actor_tuple)
916 , converter8::do_(actor_tuple)
917 , converter9::do_(actor_tuple)
918 , converter10::do_(actor_tuple)
919 , converter11::do_(actor_tuple)
925 #if PHOENIX_LIMIT > 12
927 /////////////////////////////////////
929 struct convert_actors_<13>
931 template <typename TupleResultT, typename ActorTupleT>
935 do_(ActorTupleT const& actor_tuple)
937 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
938 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
939 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
940 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
941 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
942 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
943 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
944 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
945 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
946 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
947 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
948 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
949 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
951 using namespace tuple_index_names;
953 converter0::do_(actor_tuple)
954 , converter1::do_(actor_tuple)
955 , converter2::do_(actor_tuple)
956 , converter3::do_(actor_tuple)
957 , converter4::do_(actor_tuple)
958 , converter5::do_(actor_tuple)
959 , converter6::do_(actor_tuple)
960 , converter7::do_(actor_tuple)
961 , converter8::do_(actor_tuple)
962 , converter9::do_(actor_tuple)
963 , converter10::do_(actor_tuple)
964 , converter11::do_(actor_tuple)
965 , converter12::do_(actor_tuple)
971 ///////////////////////////////////////
973 struct convert_actors_<14>
975 template <typename TupleResultT, typename ActorTupleT>
979 do_(ActorTupleT const& actor_tuple)
981 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
982 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
983 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
984 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
985 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
986 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
987 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
988 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
989 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
990 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
991 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
992 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
993 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
994 typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
996 using namespace tuple_index_names;
998 converter0::do_(actor_tuple)
999 , converter1::do_(actor_tuple)
1000 , converter2::do_(actor_tuple)
1001 , converter3::do_(actor_tuple)
1002 , converter4::do_(actor_tuple)
1003 , converter5::do_(actor_tuple)
1004 , converter6::do_(actor_tuple)
1005 , converter7::do_(actor_tuple)
1006 , converter8::do_(actor_tuple)
1007 , converter9::do_(actor_tuple)
1008 , converter10::do_(actor_tuple)
1009 , converter11::do_(actor_tuple)
1010 , converter12::do_(actor_tuple)
1011 , converter13::do_(actor_tuple)
1017 ///////////////////////////////////////
1019 struct convert_actors_<15>
1021 template <typename TupleResultT, typename ActorTupleT>
1025 do_(ActorTupleT const& actor_tuple)
1027 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
1028 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
1029 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
1030 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
1031 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
1032 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
1033 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
1034 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
1035 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
1036 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
1037 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
1038 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
1039 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
1040 typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
1041 typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
1043 using namespace tuple_index_names;
1044 return TupleResultT(
1045 converter0::do_(actor_tuple)
1046 , converter1::do_(actor_tuple)
1047 , converter2::do_(actor_tuple)
1048 , converter3::do_(actor_tuple)
1049 , converter4::do_(actor_tuple)
1050 , converter5::do_(actor_tuple)
1051 , converter6::do_(actor_tuple)
1052 , converter7::do_(actor_tuple)
1053 , converter8::do_(actor_tuple)
1054 , converter9::do_(actor_tuple)
1055 , converter10::do_(actor_tuple)
1056 , converter11::do_(actor_tuple)
1057 , converter12::do_(actor_tuple)
1058 , converter13::do_(actor_tuple)
1059 , converter14::do_(actor_tuple)
1072 ///////////////////////////////////////////////////////////////////////////////
1073 } // namespace phoenix
1075 #endif // PHOENIX_TUPLEHELPERS_HPP