1
/*=============================================================================
3
Copyright (c) 2002 Joel de Guzman
4
Copyright (c) 2002-2003 Hartmut Kaiser
6
Permission to copy, use, modify, sell and distribute this software
7
is granted provided this copyright notice appears in all copies.
8
This software is provided "as is" without express or implied
9
warranty, and with no claim as to its suitability for any purpose.
10
==============================================================================*/
11
#ifndef PHOENIX_TUPLEHELPERS_HPP
12
#define PHOENIX_TUPLEHELPERS_HPP
14
///////////////////////////////////////////////////////////////////////////////
16
#include "boost/spirit/phoenix/tuples.hpp"
18
///////////////////////////////////////////////////////////////////////////////
22
///////////////////////////////////////////////////////////////////////////////
24
// make_tuple template class
26
// This template class is used to calculate a tuple type required to hold
27
// the given template parameter type
29
///////////////////////////////////////////////////////////////////////////////
31
///////////////////////////////////////////////////////////////////////////////
32
// normal (non-tuple types are wrapped into a tuple)
33
template <typename ResultT>
36
typedef tuple<ResultT> type;
39
///////////////////////////////////////////////////////////////////////////////
40
// nil_t is converted to an empty tuple type
42
struct make_tuple<nil_t> {
47
///////////////////////////////////////////////////////////////////////////////
48
// tuple types are left alone without any refactoring
50
typename A, typename B, typename C
52
, typename D, typename E, typename F
54
, typename G, typename H, typename I
56
, typename J, typename K, typename L
57
#if PHOENIX_LIMIT > 12
58
, typename M, typename N, typename O
64
struct make_tuple<tuple<A, B, C
71
#if PHOENIX_LIMIT > 12
79
// the tuple parameter itself is the required tuple type
87
#if PHOENIX_LIMIT > 12
96
///////////////////////////////////////////////////////////////////////////////
98
// concat_tuple type computer
100
// This class returns the type of a tuple, which is constructed by
101
// concatenating a tuple with a given type
103
///////////////////////////////////////////////////////////////////////////////
104
template <typename TupleT, typename AppendT>
107
///////////////////////////////////////////////////////////////////////////////
109
// concat tuple <0 member> class
111
///////////////////////////////////////////////////////////////////////////////
112
template <typename AppendT>
113
struct concat_tuple<tuple<>, AppendT> {
115
typedef tuple<AppendT> type;
119
struct concat_tuple<tuple<>, nil_t> {
121
typedef tuple<> type;
124
///////////////////////////////////////////////////////////////////////////////
126
// concat tuple <1 member> class
128
///////////////////////////////////////////////////////////////////////////////
129
template <typename A, typename AppendT>
130
struct concat_tuple<tuple<A>, AppendT> {
132
typedef tuple<A, AppendT> type;
135
template <typename A>
136
struct concat_tuple<tuple<A>, nil_t> {
138
typedef tuple<A> type;
141
///////////////////////////////////////////////////////////////////////////////
143
// concat tuple <2 member> class
145
///////////////////////////////////////////////////////////////////////////////
146
template <typename A, typename B, typename AppendT>
147
struct concat_tuple<tuple<A, B>, AppendT> {
149
typedef tuple<A, B, AppendT> type;
152
template <typename A, typename B>
153
struct concat_tuple<tuple<A, B>, nil_t> {
155
typedef tuple<A, B> type;
158
#if PHOENIX_LIMIT > 3
159
///////////////////////////////////////////////////////////////////////////////
161
// concat tuple <3 member> class
163
///////////////////////////////////////////////////////////////////////////////
165
typename A, typename B, typename C,
168
struct concat_tuple<tuple<A, B, C>, AppendT> {
170
typedef tuple<A, B, C, AppendT> type;
174
typename A, typename B, typename C
176
struct concat_tuple<tuple<A, B, C>, nil_t> {
178
typedef tuple<A, B, C> type;
181
///////////////////////////////////////////////////////////////////////////////
183
// concat tuple <4 member> class
185
///////////////////////////////////////////////////////////////////////////////
187
typename A, typename B, typename C, typename D,
190
struct concat_tuple<tuple<A, B, C, D>, AppendT> {
192
typedef tuple<A, B, C, D, AppendT> type;
196
typename A, typename B, typename C, typename D
198
struct concat_tuple<tuple<A, B, C, D>, nil_t> {
200
typedef tuple<A, B, C, D> type;
203
///////////////////////////////////////////////////////////////////////////////
205
// concat tuple <5 member> class
207
///////////////////////////////////////////////////////////////////////////////
209
typename A, typename B, typename C, typename D, typename E,
212
struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
214
typedef tuple<A, B, C, D, E, AppendT> type;
218
typename A, typename B, typename C, typename D, typename E
220
struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
222
typedef tuple<A, B, C, D, E> type;
225
#if PHOENIX_LIMIT > 6
226
///////////////////////////////////////////////////////////////////////////////
228
// concat tuple <6 member> class
230
///////////////////////////////////////////////////////////////////////////////
232
typename A, typename B, typename C, typename D, typename E, typename F,
235
struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
237
typedef tuple<A, B, C, D, E, F, AppendT> type;
241
typename A, typename B, typename C, typename D, typename E, typename F
243
struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
245
typedef tuple<A, B, C, D, E, F> type;
248
///////////////////////////////////////////////////////////////////////////////
250
// concat tuple <7 member> class
252
///////////////////////////////////////////////////////////////////////////////
254
typename A, typename B, typename C, typename D, typename E, typename F,
258
struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
260
typedef tuple<A, B, C, D, E, F, G, AppendT> type;
264
typename A, typename B, typename C, typename D, typename E, typename F,
267
struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
269
typedef tuple<A, B, C, D, E, F, G> type;
272
///////////////////////////////////////////////////////////////////////////////
274
// concat tuple <8 member> class
276
///////////////////////////////////////////////////////////////////////////////
278
typename A, typename B, typename C, typename D, typename E, typename F,
279
typename G, typename H,
282
struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
284
typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
288
typename A, typename B, typename C, typename D, typename E, typename F,
289
typename G, typename H
291
struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
293
typedef tuple<A, B, C, D, E, F, G, H> type;
296
#if PHOENIX_LIMIT > 9
297
///////////////////////////////////////////////////////////////////////////////
299
// concat tuple <9 member> class
301
///////////////////////////////////////////////////////////////////////////////
303
typename A, typename B, typename C, typename D, typename E, typename F,
304
typename G, typename H, typename I,
307
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
309
typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
313
typename A, typename B, typename C, typename D, typename E, typename F,
314
typename G, typename H, typename I
316
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
318
typedef tuple<A, B, C, D, E, F, G, H, I> type;
321
///////////////////////////////////////////////////////////////////////////////
323
// concat tuple <10 member> class
325
///////////////////////////////////////////////////////////////////////////////
327
typename A, typename B, typename C, typename D, typename E, typename F,
328
typename G, typename H, typename I, typename J,
331
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
333
typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
337
typename A, typename B, typename C, typename D, typename E, typename F,
338
typename G, typename H, typename I, typename J
340
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
342
typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
345
///////////////////////////////////////////////////////////////////////////////
347
// concat tuple <11 member> class
349
///////////////////////////////////////////////////////////////////////////////
351
typename A, typename B, typename C, typename D, typename E, typename F,
352
typename G, typename H, typename I, typename J, typename K,
355
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
357
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
361
typename A, typename B, typename C, typename D, typename E, typename F,
362
typename G, typename H, typename I, typename J, typename K
364
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
366
typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
369
#if PHOENIX_LIMIT > 12
370
///////////////////////////////////////////////////////////////////////////////
372
// concat tuple <12 member> class
374
///////////////////////////////////////////////////////////////////////////////
376
typename A, typename B, typename C, typename D, typename E, typename F,
377
typename G, typename H, typename I, typename J, typename K, typename L,
380
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
382
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
386
typename A, typename B, typename C, typename D, typename E, typename F,
387
typename G, typename H, typename I, typename J, typename K, typename L
389
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
391
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
394
///////////////////////////////////////////////////////////////////////////////
396
// concat tuple <13 member> class
398
///////////////////////////////////////////////////////////////////////////////
400
typename A, typename B, typename C, typename D, typename E, typename F,
401
typename G, typename H, typename I, typename J, typename K, typename L,
405
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
407
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
411
typename A, typename B, typename C, typename D, typename E, typename F,
412
typename G, typename H, typename I, typename J, typename K, typename L,
415
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
417
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
420
///////////////////////////////////////////////////////////////////////////////
422
// concat tuple <14 member> class
424
///////////////////////////////////////////////////////////////////////////////
426
typename A, typename B, typename C, typename D, typename E, typename F,
427
typename G, typename H, typename I, typename J, typename K, typename L,
428
typename M, typename N,
431
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
433
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
437
typename A, typename B, typename C, typename D, typename E, typename F,
438
typename G, typename H, typename I, typename J, typename K, typename L,
439
typename M, typename N
441
struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
443
typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
451
///////////////////////////////////////////////////////////////////////////////
453
// concat_tuples type computer
455
// This template class returns the type of a tuple built from the
456
// concatenation of two given tuples.
458
///////////////////////////////////////////////////////////////////////////////
459
template <typename TupleT1, typename TupleT2, int N, typename AppendT>
460
struct concat_tuple_element {
463
typename concat_tuple_element<
464
typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
465
typename tuple_element<N+1, TupleT2>::type
470
template <typename TupleT1, typename TupleT2, int N>
471
struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
473
typedef TupleT1 type;
476
template <typename TupleT1, typename TupleT2>
477
struct concat_tuples {
480
typename concat_tuple_element<
482
typename tuple_element<0, TupleT2>::type
487
///////////////////////////////////////////////////////////////////////////////
489
// convert_actors template function
491
// The convert_actors template functions constructs a new tuple object
492
// composed of the elements returned by the actors contained in the
493
// input tuple. (i.e. the given tuple type 'actor_tuple' contains a set
494
// of actors to evaluate and the resulting tuple contains the results of
495
// evaluating the actors.)
497
///////////////////////////////////////////////////////////////////////////////
498
template <typename ActorT, typename TupleT>
499
struct actor_result; // forward declaration
503
template <unsigned N>
504
struct convert_actors_ {};
507
template <typename TupleResultT, typename ActorTupleT>
509
convert_actors(ActorTupleT const& actor_tuple)
511
BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
512
BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
513
return impl::convert_actors_<length>
514
::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
519
template <int N, typename TupleResultT, typename ActorTupleT>
522
typedef typename tuple_element<N, TupleResultT>::type type;
525
struct is_default_t {};
526
typedef is_default_t<true> is_default;
527
typedef is_default_t<false> is_not_default;
530
actor_element(ActorTupleT const& actor_tuple, is_default)
532
return type(); // default construct
536
actor_element(ActorTupleT const& actor_tuple, is_not_default)
538
BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
539
return actor_tuple[tuple_index<N>()](); // apply the actor
543
do_(ActorTupleT const& actor_tuple)
545
return actor_element(
546
actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
550
///////////////////////////////////////
552
struct convert_actors_<1>
554
template <typename TupleResultT, typename ActorTupleT>
558
do_(ActorTupleT const& actor_tuple)
560
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
563
converter0::do_(actor_tuple)
569
///////////////////////////////////////
571
struct convert_actors_<2>
573
template <typename TupleResultT, typename ActorTupleT>
577
do_(ActorTupleT const& actor_tuple)
579
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
580
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
582
using namespace tuple_index_names;
584
converter0::do_(actor_tuple)
585
, converter1::do_(actor_tuple)
591
///////////////////////////////////////
593
struct convert_actors_<3>
595
template <typename TupleResultT, typename ActorTupleT>
599
do_(ActorTupleT const& actor_tuple)
601
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
602
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
603
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
605
using namespace tuple_index_names;
607
converter0::do_(actor_tuple)
608
, converter1::do_(actor_tuple)
609
, converter2::do_(actor_tuple)
615
#if PHOENIX_LIMIT > 3
617
/////////////////////////////////////
619
struct convert_actors_<4>
621
template <typename TupleResultT, typename ActorTupleT>
625
do_(ActorTupleT const& actor_tuple)
627
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
628
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
629
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
630
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
632
using namespace tuple_index_names;
634
converter0::do_(actor_tuple)
635
, converter1::do_(actor_tuple)
636
, converter2::do_(actor_tuple)
637
, converter3::do_(actor_tuple)
643
/////////////////////////////////////
645
struct convert_actors_<5>
647
template <typename TupleResultT, typename ActorTupleT>
651
do_(ActorTupleT const& actor_tuple)
653
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
654
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
655
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
656
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
657
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
659
using namespace tuple_index_names;
661
converter0::do_(actor_tuple)
662
, converter1::do_(actor_tuple)
663
, converter2::do_(actor_tuple)
664
, converter3::do_(actor_tuple)
665
, converter4::do_(actor_tuple)
671
/////////////////////////////////////
673
struct convert_actors_<6>
675
template <typename TupleResultT, typename ActorTupleT>
679
do_(ActorTupleT const& actor_tuple)
681
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
682
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
683
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
684
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
685
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
686
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
688
using namespace tuple_index_names;
690
converter0::do_(actor_tuple)
691
, converter1::do_(actor_tuple)
692
, converter2::do_(actor_tuple)
693
, converter3::do_(actor_tuple)
694
, converter4::do_(actor_tuple)
695
, converter5::do_(actor_tuple)
701
#if PHOENIX_LIMIT > 6
703
/////////////////////////////////////
705
struct convert_actors_<7>
707
template <typename TupleResultT, typename ActorTupleT>
711
do_(ActorTupleT const& actor_tuple)
713
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
714
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
715
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
716
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
717
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
718
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
719
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
721
using namespace tuple_index_names;
723
converter0::do_(actor_tuple)
724
, converter1::do_(actor_tuple)
725
, converter2::do_(actor_tuple)
726
, converter3::do_(actor_tuple)
727
, converter4::do_(actor_tuple)
728
, converter5::do_(actor_tuple)
729
, converter6::do_(actor_tuple)
735
/////////////////////////////////////
737
struct convert_actors_<8>
739
template <typename TupleResultT, typename ActorTupleT>
743
do_(ActorTupleT const& actor_tuple)
745
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
746
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
747
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
748
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
749
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
750
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
751
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
752
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
754
using namespace tuple_index_names;
756
converter0::do_(actor_tuple)
757
, converter1::do_(actor_tuple)
758
, converter2::do_(actor_tuple)
759
, converter3::do_(actor_tuple)
760
, converter4::do_(actor_tuple)
761
, converter5::do_(actor_tuple)
762
, converter6::do_(actor_tuple)
763
, converter7::do_(actor_tuple)
769
/////////////////////////////////////
771
struct convert_actors_<9>
773
template <typename TupleResultT, typename ActorTupleT>
777
do_(ActorTupleT const& actor_tuple)
779
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
780
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
781
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
782
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
783
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
784
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
785
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
786
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
787
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
789
using namespace tuple_index_names;
791
converter0::do_(actor_tuple)
792
, converter1::do_(actor_tuple)
793
, converter2::do_(actor_tuple)
794
, converter3::do_(actor_tuple)
795
, converter4::do_(actor_tuple)
796
, converter5::do_(actor_tuple)
797
, converter6::do_(actor_tuple)
798
, converter7::do_(actor_tuple)
799
, converter8::do_(actor_tuple)
805
#if PHOENIX_LIMIT > 9
807
/////////////////////////////////////
809
struct convert_actors_<10>
811
template <typename TupleResultT, typename ActorTupleT>
815
do_(ActorTupleT const& actor_tuple)
817
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
818
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
819
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
820
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
821
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
822
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
823
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
824
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
825
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
826
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
828
using namespace tuple_index_names;
830
converter0::do_(actor_tuple)
831
, converter1::do_(actor_tuple)
832
, converter2::do_(actor_tuple)
833
, converter3::do_(actor_tuple)
834
, converter4::do_(actor_tuple)
835
, converter5::do_(actor_tuple)
836
, converter6::do_(actor_tuple)
837
, converter7::do_(actor_tuple)
838
, converter8::do_(actor_tuple)
839
, converter9::do_(actor_tuple)
845
/////////////////////////////////////
847
struct convert_actors_<11>
849
template <typename TupleResultT, typename ActorTupleT>
853
do_(ActorTupleT const& actor_tuple)
855
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
856
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
857
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
858
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
859
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
860
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
861
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
862
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
863
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
864
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
865
typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
867
using namespace tuple_index_names;
869
converter0::do_(actor_tuple)
870
, converter1::do_(actor_tuple)
871
, converter2::do_(actor_tuple)
872
, converter3::do_(actor_tuple)
873
, converter4::do_(actor_tuple)
874
, converter5::do_(actor_tuple)
875
, converter6::do_(actor_tuple)
876
, converter7::do_(actor_tuple)
877
, converter8::do_(actor_tuple)
878
, converter9::do_(actor_tuple)
879
, converter10::do_(actor_tuple)
885
/////////////////////////////////////
887
struct convert_actors_<12>
889
template <typename TupleResultT, typename ActorTupleT>
893
do_(ActorTupleT const& actor_tuple)
895
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
896
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
897
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
898
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
899
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
900
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
901
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
902
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
903
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
904
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
905
typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
906
typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
908
using namespace tuple_index_names;
910
converter0::do_(actor_tuple)
911
, converter1::do_(actor_tuple)
912
, converter2::do_(actor_tuple)
913
, converter3::do_(actor_tuple)
914
, converter4::do_(actor_tuple)
915
, converter5::do_(actor_tuple)
916
, converter6::do_(actor_tuple)
917
, converter7::do_(actor_tuple)
918
, converter8::do_(actor_tuple)
919
, converter9::do_(actor_tuple)
920
, converter10::do_(actor_tuple)
921
, converter11::do_(actor_tuple)
927
#if PHOENIX_LIMIT > 12
929
/////////////////////////////////////
931
struct convert_actors_<13>
933
template <typename TupleResultT, typename ActorTupleT>
937
do_(ActorTupleT const& actor_tuple)
939
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
940
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
941
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
942
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
943
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
944
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
945
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
946
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
947
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
948
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
949
typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
950
typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
951
typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
953
using namespace tuple_index_names;
955
converter0::do_(actor_tuple)
956
, converter1::do_(actor_tuple)
957
, converter2::do_(actor_tuple)
958
, converter3::do_(actor_tuple)
959
, converter4::do_(actor_tuple)
960
, converter5::do_(actor_tuple)
961
, converter6::do_(actor_tuple)
962
, converter7::do_(actor_tuple)
963
, converter8::do_(actor_tuple)
964
, converter9::do_(actor_tuple)
965
, converter10::do_(actor_tuple)
966
, converter11::do_(actor_tuple)
967
, converter12::do_(actor_tuple)
973
///////////////////////////////////////
975
struct convert_actors_<14>
977
template <typename TupleResultT, typename ActorTupleT>
981
do_(ActorTupleT const& actor_tuple)
983
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
984
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
985
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
986
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
987
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
988
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
989
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
990
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
991
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
992
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
993
typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
994
typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
995
typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
996
typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
998
using namespace tuple_index_names;
1000
converter0::do_(actor_tuple)
1001
, converter1::do_(actor_tuple)
1002
, converter2::do_(actor_tuple)
1003
, converter3::do_(actor_tuple)
1004
, converter4::do_(actor_tuple)
1005
, converter5::do_(actor_tuple)
1006
, converter6::do_(actor_tuple)
1007
, converter7::do_(actor_tuple)
1008
, converter8::do_(actor_tuple)
1009
, converter9::do_(actor_tuple)
1010
, converter10::do_(actor_tuple)
1011
, converter11::do_(actor_tuple)
1012
, converter12::do_(actor_tuple)
1013
, converter13::do_(actor_tuple)
1019
///////////////////////////////////////
1021
struct convert_actors_<15>
1023
template <typename TupleResultT, typename ActorTupleT>
1027
do_(ActorTupleT const& actor_tuple)
1029
typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
1030
typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
1031
typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
1032
typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
1033
typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
1034
typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
1035
typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
1036
typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
1037
typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
1038
typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
1039
typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
1040
typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
1041
typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
1042
typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
1043
typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
1045
using namespace tuple_index_names;
1046
return TupleResultT(
1047
converter0::do_(actor_tuple)
1048
, converter1::do_(actor_tuple)
1049
, converter2::do_(actor_tuple)
1050
, converter3::do_(actor_tuple)
1051
, converter4::do_(actor_tuple)
1052
, converter5::do_(actor_tuple)
1053
, converter6::do_(actor_tuple)
1054
, converter7::do_(actor_tuple)
1055
, converter8::do_(actor_tuple)
1056
, converter9::do_(actor_tuple)
1057
, converter10::do_(actor_tuple)
1058
, converter11::do_(actor_tuple)
1059
, converter12::do_(actor_tuple)
1060
, converter13::do_(actor_tuple)
1061
, converter14::do_(actor_tuple)
1074
///////////////////////////////////////////////////////////////////////////////
1075
} // namespace phoenix
1077
#endif // PHOENIX_TUPLEHELPERS_HPP