File indexing completed on 2025-12-16 10:09:08
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef BOOST_SPIRIT_CLASSIC_PHOENIX_TUPLE_HELPERS_HPP
0010 #define BOOST_SPIRIT_CLASSIC_PHOENIX_TUPLE_HELPERS_HPP
0011
0012
0013 #include <cassert>
0014 #include <boost/spirit/home/classic/phoenix/tuples.hpp>
0015
0016
0017 namespace phoenix
0018 {
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 template <typename ResultT>
0032 struct make_tuple {
0033
0034 typedef tuple<ResultT> type;
0035 };
0036
0037
0038
0039 template <>
0040 struct make_tuple<nil_t> {
0041
0042 typedef tuple<> type;
0043 };
0044
0045
0046
0047 template <
0048 typename A, typename B, typename C
0049 #if PHOENIX_LIMIT > 3
0050 , typename D, typename E, typename F
0051 #if PHOENIX_LIMIT > 6
0052 , typename G, typename H, typename I
0053 #if PHOENIX_LIMIT > 9
0054 , typename J, typename K, typename L
0055 #if PHOENIX_LIMIT > 12
0056 , typename M, typename N, typename O
0057 #endif
0058 #endif
0059 #endif
0060 #endif
0061 >
0062 struct make_tuple<tuple<A, B, C
0063 #if PHOENIX_LIMIT > 3
0064 , D, E, F
0065 #if PHOENIX_LIMIT > 6
0066 , G, H, I
0067 #if PHOENIX_LIMIT > 9
0068 , J, K, L
0069 #if PHOENIX_LIMIT > 12
0070 , M, N, O
0071 #endif
0072 #endif
0073 #endif
0074 #endif
0075 > > {
0076
0077
0078 typedef tuple<A, B, C
0079 #if PHOENIX_LIMIT > 3
0080 , D, E, F
0081 #if PHOENIX_LIMIT > 6
0082 , G, H, I
0083 #if PHOENIX_LIMIT > 9
0084 , J, K, L
0085 #if PHOENIX_LIMIT > 12
0086 , M, N, O
0087 #endif
0088 #endif
0089 #endif
0090 #endif
0091 > type;
0092 };
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102 template <typename TupleT, typename AppendT>
0103 struct concat_tuple;
0104
0105
0106
0107
0108
0109
0110 template <typename AppendT>
0111 struct concat_tuple<tuple<>, AppendT> {
0112
0113 typedef tuple<AppendT> type;
0114 };
0115
0116 template <>
0117 struct concat_tuple<tuple<>, nil_t> {
0118
0119 typedef tuple<> type;
0120 };
0121
0122
0123
0124
0125
0126
0127 template <typename A, typename AppendT>
0128 struct concat_tuple<tuple<A>, AppendT> {
0129
0130 typedef tuple<A, AppendT> type;
0131 };
0132
0133 template <typename A>
0134 struct concat_tuple<tuple<A>, nil_t> {
0135
0136 typedef tuple<A> type;
0137 };
0138
0139
0140
0141
0142
0143
0144 template <typename A, typename B, typename AppendT>
0145 struct concat_tuple<tuple<A, B>, AppendT> {
0146
0147 typedef tuple<A, B, AppendT> type;
0148 };
0149
0150 template <typename A, typename B>
0151 struct concat_tuple<tuple<A, B>, nil_t> {
0152
0153 typedef tuple<A, B> type;
0154 };
0155
0156 #if PHOENIX_LIMIT > 3
0157
0158
0159
0160
0161
0162 template <
0163 typename A, typename B, typename C,
0164 typename AppendT
0165 >
0166 struct concat_tuple<tuple<A, B, C>, AppendT> {
0167
0168 typedef tuple<A, B, C, AppendT> type;
0169 };
0170
0171 template <
0172 typename A, typename B, typename C
0173 >
0174 struct concat_tuple<tuple<A, B, C>, nil_t> {
0175
0176 typedef tuple<A, B, C> type;
0177 };
0178
0179
0180
0181
0182
0183
0184 template <
0185 typename A, typename B, typename C, typename D,
0186 typename AppendT
0187 >
0188 struct concat_tuple<tuple<A, B, C, D>, AppendT> {
0189
0190 typedef tuple<A, B, C, D, AppendT> type;
0191 };
0192
0193 template <
0194 typename A, typename B, typename C, typename D
0195 >
0196 struct concat_tuple<tuple<A, B, C, D>, nil_t> {
0197
0198 typedef tuple<A, B, C, D> type;
0199 };
0200
0201
0202
0203
0204
0205
0206 template <
0207 typename A, typename B, typename C, typename D, typename E,
0208 typename AppendT
0209 >
0210 struct concat_tuple<tuple<A, B, C, D, E>, AppendT> {
0211
0212 typedef tuple<A, B, C, D, E, AppendT> type;
0213 };
0214
0215 template <
0216 typename A, typename B, typename C, typename D, typename E
0217 >
0218 struct concat_tuple<tuple<A, B, C, D, E>, nil_t> {
0219
0220 typedef tuple<A, B, C, D, E> type;
0221 };
0222
0223 #if PHOENIX_LIMIT > 6
0224
0225
0226
0227
0228
0229 template <
0230 typename A, typename B, typename C, typename D, typename E, typename F,
0231 typename AppendT
0232 >
0233 struct concat_tuple<tuple<A, B, C, D, E, F>, AppendT> {
0234
0235 typedef tuple<A, B, C, D, E, F, AppendT> type;
0236 };
0237
0238 template <
0239 typename A, typename B, typename C, typename D, typename E, typename F
0240 >
0241 struct concat_tuple<tuple<A, B, C, D, E, F>, nil_t> {
0242
0243 typedef tuple<A, B, C, D, E, F> type;
0244 };
0245
0246
0247
0248
0249
0250
0251 template <
0252 typename A, typename B, typename C, typename D, typename E, typename F,
0253 typename G,
0254 typename AppendT
0255 >
0256 struct concat_tuple<tuple<A, B, C, D, E, F, G>, AppendT> {
0257
0258 typedef tuple<A, B, C, D, E, F, G, AppendT> type;
0259 };
0260
0261 template <
0262 typename A, typename B, typename C, typename D, typename E, typename F,
0263 typename G
0264 >
0265 struct concat_tuple<tuple<A, B, C, D, E, F, G>, nil_t> {
0266
0267 typedef tuple<A, B, C, D, E, F, G> type;
0268 };
0269
0270
0271
0272
0273
0274
0275 template <
0276 typename A, typename B, typename C, typename D, typename E, typename F,
0277 typename G, typename H,
0278 typename AppendT
0279 >
0280 struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, AppendT> {
0281
0282 typedef tuple<A, B, C, D, E, F, G, H, AppendT> type;
0283 };
0284
0285 template <
0286 typename A, typename B, typename C, typename D, typename E, typename F,
0287 typename G, typename H
0288 >
0289 struct concat_tuple<tuple<A, B, C, D, E, F, G, H>, nil_t> {
0290
0291 typedef tuple<A, B, C, D, E, F, G, H> type;
0292 };
0293
0294 #if PHOENIX_LIMIT > 9
0295
0296
0297
0298
0299
0300 template <
0301 typename A, typename B, typename C, typename D, typename E, typename F,
0302 typename G, typename H, typename I,
0303 typename AppendT
0304 >
0305 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, AppendT> {
0306
0307 typedef tuple<A, B, C, D, E, F, G, H, I, AppendT> type;
0308 };
0309
0310 template <
0311 typename A, typename B, typename C, typename D, typename E, typename F,
0312 typename G, typename H, typename I
0313 >
0314 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I>, nil_t> {
0315
0316 typedef tuple<A, B, C, D, E, F, G, H, I> type;
0317 };
0318
0319
0320
0321
0322
0323
0324 template <
0325 typename A, typename B, typename C, typename D, typename E, typename F,
0326 typename G, typename H, typename I, typename J,
0327 typename AppendT
0328 >
0329 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, AppendT> {
0330
0331 typedef tuple<A, B, C, D, E, F, G, H, I, J, AppendT> type;
0332 };
0333
0334 template <
0335 typename A, typename B, typename C, typename D, typename E, typename F,
0336 typename G, typename H, typename I, typename J
0337 >
0338 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J>, nil_t> {
0339
0340 typedef tuple<A, B, C, D, E, F, G, H, I, J> type;
0341 };
0342
0343
0344
0345
0346
0347
0348 template <
0349 typename A, typename B, typename C, typename D, typename E, typename F,
0350 typename G, typename H, typename I, typename J, typename K,
0351 typename AppendT
0352 >
0353 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, AppendT> {
0354
0355 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, AppendT> type;
0356 };
0357
0358 template <
0359 typename A, typename B, typename C, typename D, typename E, typename F,
0360 typename G, typename H, typename I, typename J, typename K
0361 >
0362 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K>, nil_t> {
0363
0364 typedef tuple<A, B, C, D, E, F, G, H, I, J, K> type;
0365 };
0366
0367 #if PHOENIX_LIMIT > 12
0368
0369
0370
0371
0372
0373 template <
0374 typename A, typename B, typename C, typename D, typename E, typename F,
0375 typename G, typename H, typename I, typename J, typename K, typename L,
0376 typename AppendT
0377 >
0378 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, AppendT> {
0379
0380 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, AppendT> type;
0381 };
0382
0383 template <
0384 typename A, typename B, typename C, typename D, typename E, typename F,
0385 typename G, typename H, typename I, typename J, typename K, typename L
0386 >
0387 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L>, nil_t> {
0388
0389 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L> type;
0390 };
0391
0392
0393
0394
0395
0396
0397 template <
0398 typename A, typename B, typename C, typename D, typename E, typename F,
0399 typename G, typename H, typename I, typename J, typename K, typename L,
0400 typename M,
0401 typename AppendT
0402 >
0403 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, AppendT> {
0404
0405 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, AppendT> type;
0406 };
0407
0408 template <
0409 typename A, typename B, typename C, typename D, typename E, typename F,
0410 typename G, typename H, typename I, typename J, typename K, typename L,
0411 typename M
0412 >
0413 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M>, nil_t> {
0414
0415 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M> type;
0416 };
0417
0418
0419
0420
0421
0422
0423 template <
0424 typename A, typename B, typename C, typename D, typename E, typename F,
0425 typename G, typename H, typename I, typename J, typename K, typename L,
0426 typename M, typename N,
0427 typename AppendT
0428 >
0429 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, AppendT> {
0430
0431 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N, AppendT> type;
0432 };
0433
0434 template <
0435 typename A, typename B, typename C, typename D, typename E, typename F,
0436 typename G, typename H, typename I, typename J, typename K, typename L,
0437 typename M, typename N
0438 >
0439 struct concat_tuple<tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N>, nil_t> {
0440
0441 typedef tuple<A, B, C, D, E, F, G, H, I, J, K, L, M, N> type;
0442 };
0443
0444 #endif
0445 #endif
0446 #endif
0447 #endif
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457 template <typename TupleT1, typename TupleT2, int N, typename AppendT>
0458 struct concat_tuple_element {
0459
0460 typedef
0461 typename concat_tuple_element<
0462 typename concat_tuple<TupleT1, AppendT>::type, TupleT2, N+1,
0463 typename tuple_element<N+1, TupleT2>::type
0464 >::type
0465 type;
0466 };
0467
0468 template <typename TupleT1, typename TupleT2, int N>
0469 struct concat_tuple_element<TupleT1, TupleT2, N, nil_t> {
0470
0471 typedef TupleT1 type;
0472 };
0473
0474 template <typename TupleT1, typename TupleT2>
0475 struct concat_tuples {
0476
0477 typedef
0478 typename concat_tuple_element<
0479 TupleT1, TupleT2, 0,
0480 typename tuple_element<0, TupleT2>::type
0481 >::type
0482 type;
0483 };
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496 template <typename ActorT, typename TupleT>
0497 struct actor_result;
0498
0499 namespace impl
0500 {
0501 template <unsigned N>
0502 struct convert_actors_ {};
0503 }
0504
0505 template <typename TupleResultT, typename ActorTupleT>
0506 TupleResultT
0507 convert_actors(ActorTupleT const& actor_tuple)
0508 {
0509 BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
0510 BOOST_STATIC_CONSTANT(int, length = TupleResultT::length);
0511 return impl::convert_actors_<length>
0512 ::template apply<TupleResultT, ActorTupleT>::do_(actor_tuple);
0513 }
0514
0515 namespace impl
0516 {
0517 template <int N, typename TupleResultT, typename ActorTupleT>
0518 struct convert_actor
0519 {
0520 typedef typename tuple_element<N, TupleResultT>::type type;
0521
0522 template <bool C>
0523 struct is_default_t {};
0524 typedef is_default_t<true> is_default;
0525 typedef is_default_t<false> is_not_default;
0526
0527 static type
0528 actor_element(ActorTupleT const& , is_default)
0529 {
0530 return type();
0531 }
0532
0533 static type
0534 actor_element(ActorTupleT const& actor_tuple, is_not_default)
0535 {
0536 BOOST_STATIC_ASSERT(ActorTupleT::length <= TupleResultT::length);
0537 tuple_index<N> const idx;
0538 return actor_tuple[idx]();
0539 }
0540
0541 static type
0542 do_(ActorTupleT const& actor_tuple)
0543 {
0544 return actor_element(
0545 actor_tuple, is_default_t<(N >= ActorTupleT::length)>());
0546 }
0547 };
0548
0549
0550 template <>
0551 struct convert_actors_<1>
0552 {
0553 template <typename TupleResultT, typename ActorTupleT>
0554 struct apply
0555 {
0556 static TupleResultT
0557 do_(ActorTupleT const& actor_tuple)
0558 {
0559 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0560
0561 return TupleResultT(
0562 converter0::do_(actor_tuple)
0563 );
0564 }
0565 };
0566 };
0567
0568
0569 template <>
0570 struct convert_actors_<2>
0571 {
0572 template <typename TupleResultT, typename ActorTupleT>
0573 struct apply
0574 {
0575 static TupleResultT
0576 do_(ActorTupleT const& actor_tuple)
0577 {
0578 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0579 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0580
0581 using namespace tuple_index_names;
0582 return TupleResultT(
0583 converter0::do_(actor_tuple)
0584 , converter1::do_(actor_tuple)
0585 );
0586 }
0587 };
0588 };
0589
0590
0591 template <>
0592 struct convert_actors_<3>
0593 {
0594 template <typename TupleResultT, typename ActorTupleT>
0595 struct apply
0596 {
0597 static TupleResultT
0598 do_(ActorTupleT const& actor_tuple)
0599 {
0600 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0601 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0602 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0603
0604 using namespace tuple_index_names;
0605 return TupleResultT(
0606 converter0::do_(actor_tuple)
0607 , converter1::do_(actor_tuple)
0608 , converter2::do_(actor_tuple)
0609 );
0610 }
0611 };
0612 };
0613
0614 #if PHOENIX_LIMIT > 3
0615
0616
0617 template <>
0618 struct convert_actors_<4>
0619 {
0620 template <typename TupleResultT, typename ActorTupleT>
0621 struct apply
0622 {
0623 static TupleResultT
0624 do_(ActorTupleT const& actor_tuple)
0625 {
0626 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0627 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0628 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0629 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0630
0631 using namespace tuple_index_names;
0632 return TupleResultT(
0633 converter0::do_(actor_tuple)
0634 , converter1::do_(actor_tuple)
0635 , converter2::do_(actor_tuple)
0636 , converter3::do_(actor_tuple)
0637 );
0638 }
0639 };
0640 };
0641
0642
0643 template <>
0644 struct convert_actors_<5>
0645 {
0646 template <typename TupleResultT, typename ActorTupleT>
0647 struct apply
0648 {
0649 static TupleResultT
0650 do_(ActorTupleT const& actor_tuple)
0651 {
0652 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0653 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0654 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0655 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0656 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0657
0658 using namespace tuple_index_names;
0659 return TupleResultT(
0660 converter0::do_(actor_tuple)
0661 , converter1::do_(actor_tuple)
0662 , converter2::do_(actor_tuple)
0663 , converter3::do_(actor_tuple)
0664 , converter4::do_(actor_tuple)
0665 );
0666 }
0667 };
0668 };
0669
0670
0671 template <>
0672 struct convert_actors_<6>
0673 {
0674 template <typename TupleResultT, typename ActorTupleT>
0675 struct apply
0676 {
0677 static TupleResultT
0678 do_(ActorTupleT const& actor_tuple)
0679 {
0680 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0681 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0682 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0683 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0684 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0685 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0686
0687 using namespace tuple_index_names;
0688 return TupleResultT(
0689 converter0::do_(actor_tuple)
0690 , converter1::do_(actor_tuple)
0691 , converter2::do_(actor_tuple)
0692 , converter3::do_(actor_tuple)
0693 , converter4::do_(actor_tuple)
0694 , converter5::do_(actor_tuple)
0695 );
0696 }
0697 };
0698 };
0699
0700 #if PHOENIX_LIMIT > 6
0701
0702
0703 template <>
0704 struct convert_actors_<7>
0705 {
0706 template <typename TupleResultT, typename ActorTupleT>
0707 struct apply
0708 {
0709 static TupleResultT
0710 do_(ActorTupleT const& actor_tuple)
0711 {
0712 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0713 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0714 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0715 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0716 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0717 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0718 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0719
0720 using namespace tuple_index_names;
0721 return TupleResultT(
0722 converter0::do_(actor_tuple)
0723 , converter1::do_(actor_tuple)
0724 , converter2::do_(actor_tuple)
0725 , converter3::do_(actor_tuple)
0726 , converter4::do_(actor_tuple)
0727 , converter5::do_(actor_tuple)
0728 , converter6::do_(actor_tuple)
0729 );
0730 }
0731 };
0732 };
0733
0734
0735 template <>
0736 struct convert_actors_<8>
0737 {
0738 template <typename TupleResultT, typename ActorTupleT>
0739 struct apply
0740 {
0741 static TupleResultT
0742 do_(ActorTupleT const& actor_tuple)
0743 {
0744 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0745 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0746 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0747 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0748 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0749 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0750 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0751 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0752
0753 using namespace tuple_index_names;
0754 return TupleResultT(
0755 converter0::do_(actor_tuple)
0756 , converter1::do_(actor_tuple)
0757 , converter2::do_(actor_tuple)
0758 , converter3::do_(actor_tuple)
0759 , converter4::do_(actor_tuple)
0760 , converter5::do_(actor_tuple)
0761 , converter6::do_(actor_tuple)
0762 , converter7::do_(actor_tuple)
0763 );
0764 }
0765 };
0766 };
0767
0768
0769 template <>
0770 struct convert_actors_<9>
0771 {
0772 template <typename TupleResultT, typename ActorTupleT>
0773 struct apply
0774 {
0775 static TupleResultT
0776 do_(ActorTupleT const& actor_tuple)
0777 {
0778 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0779 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0780 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0781 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0782 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0783 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0784 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0785 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0786 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0787
0788 using namespace tuple_index_names;
0789 return TupleResultT(
0790 converter0::do_(actor_tuple)
0791 , converter1::do_(actor_tuple)
0792 , converter2::do_(actor_tuple)
0793 , converter3::do_(actor_tuple)
0794 , converter4::do_(actor_tuple)
0795 , converter5::do_(actor_tuple)
0796 , converter6::do_(actor_tuple)
0797 , converter7::do_(actor_tuple)
0798 , converter8::do_(actor_tuple)
0799 );
0800 }
0801 };
0802 };
0803
0804 #if PHOENIX_LIMIT > 9
0805
0806
0807 template <>
0808 struct convert_actors_<10>
0809 {
0810 template <typename TupleResultT, typename ActorTupleT>
0811 struct apply
0812 {
0813 static TupleResultT
0814 do_(ActorTupleT const& actor_tuple)
0815 {
0816 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0817 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0818 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0819 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0820 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0821 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0822 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0823 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0824 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0825 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
0826
0827 using namespace tuple_index_names;
0828 return TupleResultT(
0829 converter0::do_(actor_tuple)
0830 , converter1::do_(actor_tuple)
0831 , converter2::do_(actor_tuple)
0832 , converter3::do_(actor_tuple)
0833 , converter4::do_(actor_tuple)
0834 , converter5::do_(actor_tuple)
0835 , converter6::do_(actor_tuple)
0836 , converter7::do_(actor_tuple)
0837 , converter8::do_(actor_tuple)
0838 , converter9::do_(actor_tuple)
0839 );
0840 }
0841 };
0842 };
0843
0844
0845 template <>
0846 struct convert_actors_<11>
0847 {
0848 template <typename TupleResultT, typename ActorTupleT>
0849 struct apply
0850 {
0851 static TupleResultT
0852 do_(ActorTupleT const& actor_tuple)
0853 {
0854 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0855 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0856 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0857 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0858 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0859 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0860 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0861 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0862 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0863 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
0864 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
0865
0866 using namespace tuple_index_names;
0867 return TupleResultT(
0868 converter0::do_(actor_tuple)
0869 , converter1::do_(actor_tuple)
0870 , converter2::do_(actor_tuple)
0871 , converter3::do_(actor_tuple)
0872 , converter4::do_(actor_tuple)
0873 , converter5::do_(actor_tuple)
0874 , converter6::do_(actor_tuple)
0875 , converter7::do_(actor_tuple)
0876 , converter8::do_(actor_tuple)
0877 , converter9::do_(actor_tuple)
0878 , converter10::do_(actor_tuple)
0879 );
0880 }
0881 };
0882 };
0883
0884
0885 template <>
0886 struct convert_actors_<12>
0887 {
0888 template <typename TupleResultT, typename ActorTupleT>
0889 struct apply
0890 {
0891 static TupleResultT
0892 do_(ActorTupleT const& actor_tuple)
0893 {
0894 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0895 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0896 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0897 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0898 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0899 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0900 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0901 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0902 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0903 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
0904 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
0905 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
0906
0907 using namespace tuple_index_names;
0908 return TupleResultT(
0909 converter0::do_(actor_tuple)
0910 , converter1::do_(actor_tuple)
0911 , converter2::do_(actor_tuple)
0912 , converter3::do_(actor_tuple)
0913 , converter4::do_(actor_tuple)
0914 , converter5::do_(actor_tuple)
0915 , converter6::do_(actor_tuple)
0916 , converter7::do_(actor_tuple)
0917 , converter8::do_(actor_tuple)
0918 , converter9::do_(actor_tuple)
0919 , converter10::do_(actor_tuple)
0920 , converter11::do_(actor_tuple)
0921 );
0922 }
0923 };
0924 };
0925
0926 #if PHOENIX_LIMIT > 12
0927
0928
0929 template <>
0930 struct convert_actors_<13>
0931 {
0932 template <typename TupleResultT, typename ActorTupleT>
0933 struct apply
0934 {
0935 static TupleResultT
0936 do_(ActorTupleT const& actor_tuple)
0937 {
0938 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0939 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0940 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0941 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0942 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0943 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0944 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0945 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0946 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0947 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
0948 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
0949 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
0950 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
0951
0952 using namespace tuple_index_names;
0953 return TupleResultT(
0954 converter0::do_(actor_tuple)
0955 , converter1::do_(actor_tuple)
0956 , converter2::do_(actor_tuple)
0957 , converter3::do_(actor_tuple)
0958 , converter4::do_(actor_tuple)
0959 , converter5::do_(actor_tuple)
0960 , converter6::do_(actor_tuple)
0961 , converter7::do_(actor_tuple)
0962 , converter8::do_(actor_tuple)
0963 , converter9::do_(actor_tuple)
0964 , converter10::do_(actor_tuple)
0965 , converter11::do_(actor_tuple)
0966 , converter12::do_(actor_tuple)
0967 );
0968 }
0969 };
0970 };
0971
0972
0973 template <>
0974 struct convert_actors_<14>
0975 {
0976 template <typename TupleResultT, typename ActorTupleT>
0977 struct apply
0978 {
0979 static TupleResultT
0980 do_(ActorTupleT const& actor_tuple)
0981 {
0982 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
0983 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
0984 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
0985 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
0986 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
0987 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
0988 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
0989 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
0990 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
0991 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
0992 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
0993 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
0994 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
0995 typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
0996
0997 using namespace tuple_index_names;
0998 return TupleResultT(
0999 converter0::do_(actor_tuple)
1000 , converter1::do_(actor_tuple)
1001 , converter2::do_(actor_tuple)
1002 , converter3::do_(actor_tuple)
1003 , converter4::do_(actor_tuple)
1004 , converter5::do_(actor_tuple)
1005 , converter6::do_(actor_tuple)
1006 , converter7::do_(actor_tuple)
1007 , converter8::do_(actor_tuple)
1008 , converter9::do_(actor_tuple)
1009 , converter10::do_(actor_tuple)
1010 , converter11::do_(actor_tuple)
1011 , converter12::do_(actor_tuple)
1012 , converter13::do_(actor_tuple)
1013 );
1014 }
1015 };
1016 };
1017
1018
1019 template <>
1020 struct convert_actors_<15>
1021 {
1022 template <typename TupleResultT, typename ActorTupleT>
1023 struct apply
1024 {
1025 static TupleResultT
1026 do_(ActorTupleT const& actor_tuple)
1027 {
1028 typedef impl::convert_actor<0, TupleResultT, ActorTupleT> converter0;
1029 typedef impl::convert_actor<1, TupleResultT, ActorTupleT> converter1;
1030 typedef impl::convert_actor<2, TupleResultT, ActorTupleT> converter2;
1031 typedef impl::convert_actor<3, TupleResultT, ActorTupleT> converter3;
1032 typedef impl::convert_actor<4, TupleResultT, ActorTupleT> converter4;
1033 typedef impl::convert_actor<5, TupleResultT, ActorTupleT> converter5;
1034 typedef impl::convert_actor<6, TupleResultT, ActorTupleT> converter6;
1035 typedef impl::convert_actor<7, TupleResultT, ActorTupleT> converter7;
1036 typedef impl::convert_actor<8, TupleResultT, ActorTupleT> converter8;
1037 typedef impl::convert_actor<9, TupleResultT, ActorTupleT> converter9;
1038 typedef impl::convert_actor<10, TupleResultT, ActorTupleT> converter10;
1039 typedef impl::convert_actor<11, TupleResultT, ActorTupleT> converter11;
1040 typedef impl::convert_actor<12, TupleResultT, ActorTupleT> converter12;
1041 typedef impl::convert_actor<13, TupleResultT, ActorTupleT> converter13;
1042 typedef impl::convert_actor<14, TupleResultT, ActorTupleT> converter14;
1043
1044 using namespace tuple_index_names;
1045 return TupleResultT(
1046 converter0::do_(actor_tuple)
1047 , converter1::do_(actor_tuple)
1048 , converter2::do_(actor_tuple)
1049 , converter3::do_(actor_tuple)
1050 , converter4::do_(actor_tuple)
1051 , converter5::do_(actor_tuple)
1052 , converter6::do_(actor_tuple)
1053 , converter7::do_(actor_tuple)
1054 , converter8::do_(actor_tuple)
1055 , converter9::do_(actor_tuple)
1056 , converter10::do_(actor_tuple)
1057 , converter11::do_(actor_tuple)
1058 , converter12::do_(actor_tuple)
1059 , converter13::do_(actor_tuple)
1060 , converter14::do_(actor_tuple)
1061 );
1062 }
1063 };
1064 };
1065
1066 #endif
1067 #endif
1068 #endif
1069 #endif
1070 }
1071
1072
1073
1074 }
1075
1076 #endif