File indexing completed on 2025-12-16 10:09:05
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_SPIRIT_CLASSIC_PHOENIX_FUNCTIONS_HPP
0009 #define BOOST_SPIRIT_CLASSIC_PHOENIX_FUNCTIONS_HPP
0010
0011
0012 #include <boost/spirit/home/classic/phoenix/actor.hpp>
0013 #include <boost/spirit/home/classic/phoenix/composite.hpp>
0014
0015
0016 namespace phoenix {
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109 template <typename OperationT>
0110 struct function {
0111
0112 function() : op() {}
0113 function(OperationT const& op_) : op(op_) {}
0114
0115 actor<composite<OperationT> >
0116 operator()() const;
0117
0118 template <typename A>
0119 typename impl::make_composite<OperationT, A>::type
0120 operator()(A const& a) const;
0121
0122 template <typename A, typename B>
0123 typename impl::make_composite<OperationT, A, B>::type
0124 operator()(A const& a, B const& b) const;
0125
0126 template <typename A, typename B, typename C>
0127 typename impl::make_composite<OperationT, A, B, C>::type
0128 operator()(A const& a, B const& b, C const& c) const;
0129
0130 #if PHOENIX_LIMIT > 3
0131
0132 template <typename A, typename B, typename C, typename D>
0133 typename impl::make_composite<OperationT, A, B, C, D>::type
0134 operator()(A const& a, B const& b, C const& c, D const& d) const;
0135
0136 template <typename A, typename B, typename C, typename D, typename E>
0137 typename impl::make_composite<
0138 OperationT, A, B, C, D, E
0139 >::type
0140 operator()(
0141 A const& a, B const& b, C const& c, D const& d, E const& e
0142 ) const;
0143
0144 template <
0145 typename A, typename B, typename C, typename D, typename E,
0146 typename F
0147 >
0148 typename impl::make_composite<
0149 OperationT, A, B, C, D, E, F
0150 >::type
0151 operator()(
0152 A const& a, B const& b, C const& c, D const& d, E const& e,
0153 F const& f
0154 ) const;
0155
0156 #if PHOENIX_LIMIT > 6
0157
0158 template <
0159 typename A, typename B, typename C, typename D, typename E,
0160 typename F, typename G
0161 >
0162 typename impl::make_composite<
0163 OperationT, A, B, C, D, E, F, G
0164 >::type
0165 operator()(
0166 A const& a, B const& b, C const& c, D const& d, E const& e,
0167 F const& f, G const& g
0168 ) const;
0169
0170 template <
0171 typename A, typename B, typename C, typename D, typename E,
0172 typename F, typename G, typename H
0173 >
0174 typename impl::make_composite<
0175 OperationT, A, B, C, D, E, F, G, H
0176 >::type
0177 operator()(
0178 A const& a, B const& b, C const& c, D const& d, E const& e,
0179 F const& f, G const& g, H const& h
0180 ) const;
0181
0182 template <
0183 typename A, typename B, typename C, typename D, typename E,
0184 typename F, typename G, typename H, typename I
0185 >
0186 typename impl::make_composite<
0187 OperationT, A, B, C, D, E, F, G, H, I
0188 >::type
0189 operator()(
0190 A const& a, B const& b, C const& c, D const& d, E const& e,
0191 F const& f, G const& g, H const& h, I const& i
0192 ) const;
0193
0194 #if PHOENIX_LIMIT > 9
0195
0196 template <
0197 typename A, typename B, typename C, typename D, typename E,
0198 typename F, typename G, typename H, typename I, typename J
0199 >
0200 typename impl::make_composite<
0201 OperationT, A, B, C, D, E, F, G, H, I, J
0202 >::type
0203 operator()(
0204 A const& a, B const& b, C const& c, D const& d, E const& e,
0205 F const& f, G const& g, H const& h, I const& i, J const& j
0206 ) const;
0207
0208 template <
0209 typename A, typename B, typename C, typename D, typename E,
0210 typename F, typename G, typename H, typename I, typename J,
0211 typename K
0212 >
0213 typename impl::make_composite<
0214 OperationT, A, B, C, D, E, F, G, H, I, J, K
0215 >::type
0216 operator()(
0217 A const& a, B const& b, C const& c, D const& d, E const& e,
0218 F const& f, G const& g, H const& h, I const& i, J const& j,
0219 K const& k
0220 ) const;
0221
0222 template <
0223 typename A, typename B, typename C, typename D, typename E,
0224 typename F, typename G, typename H, typename I, typename J,
0225 typename K, typename L
0226 >
0227 typename impl::make_composite<
0228 OperationT, A, B, C, D, E, F, G, H, I, J, K, L
0229 >::type
0230 operator()(
0231 A const& a, B const& b, C const& c, D const& d, E const& e,
0232 F const& f, G const& g, H const& h, I const& i, J const& j,
0233 K const& k, L const& l
0234 ) const;
0235
0236 #if PHOENIX_LIMIT > 12
0237
0238 template <
0239 typename A, typename B, typename C, typename D, typename E,
0240 typename F, typename G, typename H, typename I, typename J,
0241 typename K, typename L, typename M
0242 >
0243 typename impl::make_composite<
0244 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
0245 >::type
0246 operator()(
0247 A const& a, B const& b, C const& c, D const& d, E const& e,
0248 F const& f, G const& g, H const& h, I const& i, J const& j,
0249 K const& k, L const& l, M const& m
0250 ) const;
0251
0252 template <
0253 typename A, typename B, typename C, typename D, typename E,
0254 typename F, typename G, typename H, typename I, typename J,
0255 typename K, typename L, typename M, typename N
0256 >
0257 typename impl::make_composite<
0258 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
0259 >::type
0260 operator()(
0261 A const& a, B const& b, C const& c, D const& d, E const& e,
0262 F const& f, G const& g, H const& h, I const& i, J const& j,
0263 K const& k, L const& l, M const& m, N const& n
0264 ) const;
0265
0266 template <
0267 typename A, typename B, typename C, typename D, typename E,
0268 typename F, typename G, typename H, typename I, typename J,
0269 typename K, typename L, typename M, typename N, typename O
0270 >
0271 typename impl::make_composite<
0272 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
0273 >::type
0274 operator()(
0275 A const& a, B const& b, C const& c, D const& d, E const& e,
0276 F const& f, G const& g, H const& h, I const& i, J const& j,
0277 K const& k, L const& l, M const& m, N const& n, O const& o
0278 ) const;
0279
0280 #endif
0281 #endif
0282 #endif
0283 #endif
0284
0285 OperationT op;
0286 };
0287
0288
0289
0290
0291
0292
0293 template <typename OperationT>
0294 inline actor<composite<OperationT> >
0295 function<OperationT>::operator()() const
0296 {
0297 return actor<composite<OperationT> >(op);
0298 }
0299
0300
0301 template <typename OperationT>
0302 template <typename A>
0303 inline typename impl::make_composite<OperationT, A>::type
0304 function<OperationT>::operator()(A const& a) const
0305 {
0306 typedef typename impl::make_composite<OperationT, A>::composite_type ret_t;
0307 return ret_t
0308 (
0309 op,
0310 as_actor<A>::convert(a)
0311 );
0312 }
0313
0314
0315 template <typename OperationT>
0316 template <typename A, typename B>
0317 inline typename impl::make_composite<OperationT, A, B>::type
0318 function<OperationT>::operator()(A const& a, B const& b) const
0319 {
0320 typedef
0321 typename impl::make_composite<OperationT, A, B>::composite_type
0322 ret_t;
0323
0324 return ret_t(
0325 op,
0326 as_actor<A>::convert(a),
0327 as_actor<B>::convert(b)
0328 );
0329 }
0330
0331
0332 template <typename OperationT>
0333 template <typename A, typename B, typename C>
0334 inline typename impl::make_composite<OperationT, A, B, C>::type
0335 function<OperationT>::operator()(A const& a, B const& b, C const& c) const
0336 {
0337 typedef
0338 typename impl::make_composite<OperationT, A, B, C>::composite_type
0339 ret_t;
0340
0341 return ret_t(
0342 op,
0343 as_actor<A>::convert(a),
0344 as_actor<B>::convert(b),
0345 as_actor<C>::convert(c)
0346 );
0347 }
0348
0349 #if PHOENIX_LIMIT > 3
0350
0351 template <typename OperationT>
0352 template <
0353 typename A, typename B, typename C, typename D
0354 >
0355 inline typename impl::make_composite<
0356 OperationT, A, B, C, D
0357 >::type
0358 function<OperationT>::operator()(
0359 A const& a, B const& b, C const& c, D const& d
0360 ) const
0361 {
0362 typedef typename impl::make_composite<
0363 OperationT, A, B, C, D
0364 >::composite_type ret_t;
0365
0366 return ret_t(
0367 op,
0368 as_actor<A>::convert(a),
0369 as_actor<B>::convert(b),
0370 as_actor<C>::convert(c),
0371 as_actor<D>::convert(d)
0372 );
0373 }
0374
0375
0376 template <typename OperationT>
0377 template <
0378 typename A, typename B, typename C, typename D, typename E
0379 >
0380 inline typename impl::make_composite<
0381 OperationT, A, B, C, D, E
0382 >::type
0383 function<OperationT>::operator()(
0384 A const& a, B const& b, C const& c, D const& d, E const& e
0385 ) const
0386 {
0387 typedef typename impl::make_composite<
0388 OperationT, A, B, C, D, E
0389 >::composite_type ret_t;
0390
0391 return ret_t(
0392 op,
0393 as_actor<A>::convert(a),
0394 as_actor<B>::convert(b),
0395 as_actor<C>::convert(c),
0396 as_actor<D>::convert(d),
0397 as_actor<E>::convert(e)
0398 );
0399 }
0400
0401
0402 template <typename OperationT>
0403 template <
0404 typename A, typename B, typename C, typename D, typename E,
0405 typename F
0406 >
0407 inline typename impl::make_composite<
0408 OperationT, A, B, C, D, E, F
0409 >::type
0410 function<OperationT>::operator()(
0411 A const& a, B const& b, C const& c, D const& d, E const& e,
0412 F const& f
0413 ) const
0414 {
0415 typedef typename impl::make_composite<
0416 OperationT, A, B, C, D, E, F
0417 >::composite_type ret_t;
0418
0419 return ret_t(
0420 op,
0421 as_actor<A>::convert(a),
0422 as_actor<B>::convert(b),
0423 as_actor<C>::convert(c),
0424 as_actor<D>::convert(d),
0425 as_actor<E>::convert(e),
0426 as_actor<F>::convert(f)
0427 );
0428 }
0429
0430 #if PHOENIX_LIMIT > 6
0431
0432
0433 template <typename OperationT>
0434 template <
0435 typename A, typename B, typename C, typename D, typename E,
0436 typename F, typename G
0437 >
0438 inline typename impl::make_composite<
0439 OperationT, A, B, C, D, E, F, G
0440 >::type
0441 function<OperationT>::operator()(
0442 A const& a, B const& b, C const& c, D const& d, E const& e,
0443 F const& f, G const& g
0444 ) const
0445 {
0446 typedef typename impl::make_composite<
0447 OperationT, A, B, C, D, E, F, G
0448 >::composite_type ret_t;
0449
0450 return ret_t(
0451 op,
0452 as_actor<A>::convert(a),
0453 as_actor<B>::convert(b),
0454 as_actor<C>::convert(c),
0455 as_actor<D>::convert(d),
0456 as_actor<E>::convert(e),
0457 as_actor<F>::convert(f),
0458 as_actor<G>::convert(g)
0459 );
0460 }
0461
0462
0463 template <typename OperationT>
0464 template <
0465 typename A, typename B, typename C, typename D, typename E,
0466 typename F, typename G, typename H
0467 >
0468 inline typename impl::make_composite<
0469 OperationT, A, B, C, D, E, F, G, H
0470 >::type
0471 function<OperationT>::operator()(
0472 A const& a, B const& b, C const& c, D const& d, E const& e,
0473 F const& f, G const& g, H const& h
0474 ) const
0475 {
0476 typedef typename impl::make_composite<
0477 OperationT, A, B, C, D, E, F, G, H
0478 >::composite_type ret_t;
0479
0480 return ret_t(
0481 op,
0482 as_actor<A>::convert(a),
0483 as_actor<B>::convert(b),
0484 as_actor<C>::convert(c),
0485 as_actor<D>::convert(d),
0486 as_actor<E>::convert(e),
0487 as_actor<F>::convert(f),
0488 as_actor<G>::convert(g),
0489 as_actor<H>::convert(h)
0490 );
0491 }
0492
0493
0494 template <typename OperationT>
0495 template <
0496 typename A, typename B, typename C, typename D, typename E,
0497 typename F, typename G, typename H, typename I
0498 >
0499 inline typename impl::make_composite<
0500 OperationT, A, B, C, D, E, F, G, H, I
0501 >::type
0502 function<OperationT>::operator()(
0503 A const& a, B const& b, C const& c, D const& d, E const& e,
0504 F const& f, G const& g, H const& h, I const& i
0505 ) const
0506 {
0507 typedef typename impl::make_composite<
0508 OperationT, A, B, C, D, E, F, G, H, I
0509 >::composite_type ret_t;
0510
0511 return ret_t(
0512 op,
0513 as_actor<A>::convert(a),
0514 as_actor<B>::convert(b),
0515 as_actor<C>::convert(c),
0516 as_actor<D>::convert(d),
0517 as_actor<E>::convert(e),
0518 as_actor<F>::convert(f),
0519 as_actor<G>::convert(g),
0520 as_actor<H>::convert(h),
0521 as_actor<I>::convert(i)
0522 );
0523 }
0524
0525 #if PHOENIX_LIMIT > 9
0526
0527
0528 template <typename OperationT>
0529 template <
0530 typename A, typename B, typename C, typename D, typename E,
0531 typename F, typename G, typename H, typename I, typename J
0532 >
0533 inline typename impl::make_composite<
0534 OperationT, A, B, C, D, E, F, G, H, I, J
0535 >::type
0536 function<OperationT>::operator()(
0537 A const& a, B const& b, C const& c, D const& d, E const& e,
0538 F const& f, G const& g, H const& h, I const& i, J const& j
0539 ) const
0540 {
0541 typedef typename impl::make_composite<
0542 OperationT, A, B, C, D, E, F, G, H, I, J
0543 >::composite_type ret_t;
0544
0545 return ret_t(
0546 op,
0547 as_actor<A>::convert(a),
0548 as_actor<B>::convert(b),
0549 as_actor<C>::convert(c),
0550 as_actor<D>::convert(d),
0551 as_actor<E>::convert(e),
0552 as_actor<F>::convert(f),
0553 as_actor<G>::convert(g),
0554 as_actor<H>::convert(h),
0555 as_actor<I>::convert(i),
0556 as_actor<J>::convert(j)
0557 );
0558 }
0559
0560
0561 template <typename OperationT>
0562 template <
0563 typename A, typename B, typename C, typename D, typename E,
0564 typename F, typename G, typename H, typename I, typename J,
0565 typename K
0566 >
0567 inline typename impl::make_composite<
0568 OperationT, A, B, C, D, E, F, G, H, I, J, K
0569 >::type
0570 function<OperationT>::operator()(
0571 A const& a, B const& b, C const& c, D const& d, E const& e,
0572 F const& f, G const& g, H const& h, I const& i, J const& j,
0573 K const& k
0574 ) const
0575 {
0576 typedef typename impl::make_composite<
0577 OperationT, A, B, C, D, E, F, G, H, I, J, K
0578 >::composite_type ret_t;
0579
0580 return ret_t(
0581 op,
0582 as_actor<A>::convert(a),
0583 as_actor<B>::convert(b),
0584 as_actor<C>::convert(c),
0585 as_actor<D>::convert(d),
0586 as_actor<E>::convert(e),
0587 as_actor<F>::convert(f),
0588 as_actor<G>::convert(g),
0589 as_actor<H>::convert(h),
0590 as_actor<I>::convert(i),
0591 as_actor<J>::convert(j),
0592 as_actor<K>::convert(k)
0593 );
0594 }
0595
0596
0597 template <typename OperationT>
0598 template <
0599 typename A, typename B, typename C, typename D, typename E,
0600 typename F, typename G, typename H, typename I, typename J,
0601 typename K, typename L
0602 >
0603 inline typename impl::make_composite<
0604 OperationT, A, B, C, D, E, F, G, H, I, J, K, L
0605 >::type
0606 function<OperationT>::operator()(
0607 A const& a, B const& b, C const& c, D const& d, E const& e,
0608 F const& f, G const& g, H const& h, I const& i, J const& j,
0609 K const& k, L const& l
0610 ) const
0611 {
0612 typedef typename impl::make_composite<
0613 OperationT, A, B, C, D, E, F, G, H, I, J, K, L
0614 >::composite_type ret_t;
0615
0616 return ret_t(
0617 op,
0618 as_actor<A>::convert(a),
0619 as_actor<B>::convert(b),
0620 as_actor<C>::convert(c),
0621 as_actor<D>::convert(d),
0622 as_actor<E>::convert(e),
0623 as_actor<F>::convert(f),
0624 as_actor<G>::convert(g),
0625 as_actor<H>::convert(h),
0626 as_actor<I>::convert(i),
0627 as_actor<J>::convert(j),
0628 as_actor<K>::convert(k),
0629 as_actor<L>::convert(l)
0630 );
0631 }
0632
0633 #if PHOENIX_LIMIT > 12
0634
0635
0636 template <typename OperationT>
0637 template <
0638 typename A, typename B, typename C, typename D, typename E,
0639 typename F, typename G, typename H, typename I, typename J,
0640 typename K, typename L, typename M
0641 >
0642 inline typename impl::make_composite<
0643 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
0644 >::type
0645 function<OperationT>::operator()(
0646 A const& a, B const& b, C const& c, D const& d, E const& e,
0647 F const& f, G const& g, H const& h, I const& i, J const& j,
0648 K const& k, L const& l, M const& m
0649 ) const
0650 {
0651 typedef typename impl::make_composite<
0652 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M
0653 >::composite_type ret_t;
0654
0655 return ret_t(
0656 op,
0657 as_actor<A>::convert(a),
0658 as_actor<B>::convert(b),
0659 as_actor<C>::convert(c),
0660 as_actor<D>::convert(d),
0661 as_actor<E>::convert(e),
0662 as_actor<F>::convert(f),
0663 as_actor<G>::convert(g),
0664 as_actor<H>::convert(h),
0665 as_actor<I>::convert(i),
0666 as_actor<J>::convert(j),
0667 as_actor<K>::convert(k),
0668 as_actor<L>::convert(l),
0669 as_actor<M>::convert(m)
0670 );
0671 }
0672
0673
0674 template <typename OperationT>
0675 template <
0676 typename A, typename B, typename C, typename D, typename E,
0677 typename F, typename G, typename H, typename I, typename J,
0678 typename K, typename L, typename M, typename N
0679 >
0680 inline typename impl::make_composite<
0681 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
0682 >::type
0683 function<OperationT>::operator()(
0684 A const& a, B const& b, C const& c, D const& d, E const& e,
0685 F const& f, G const& g, H const& h, I const& i, J const& j,
0686 K const& k, L const& l, M const& m, N const& n
0687 ) const
0688 {
0689 typedef typename impl::make_composite<
0690 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N
0691 >::composite_type ret_t;
0692
0693 return ret_t(
0694 op,
0695 as_actor<A>::convert(a),
0696 as_actor<B>::convert(b),
0697 as_actor<C>::convert(c),
0698 as_actor<D>::convert(d),
0699 as_actor<E>::convert(e),
0700 as_actor<F>::convert(f),
0701 as_actor<G>::convert(g),
0702 as_actor<H>::convert(h),
0703 as_actor<I>::convert(i),
0704 as_actor<J>::convert(j),
0705 as_actor<K>::convert(k),
0706 as_actor<L>::convert(l),
0707 as_actor<M>::convert(m),
0708 as_actor<N>::convert(n)
0709 );
0710 }
0711
0712
0713 template <typename OperationT>
0714 template <
0715 typename A, typename B, typename C, typename D, typename E,
0716 typename F, typename G, typename H, typename I, typename J,
0717 typename K, typename L, typename M, typename N, typename O
0718 >
0719 inline typename impl::make_composite<
0720 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
0721 >::type
0722 function<OperationT>::operator()(
0723 A const& a, B const& b, C const& c, D const& d, E const& e,
0724 F const& f, G const& g, H const& h, I const& i, J const& j,
0725 K const& k, L const& l, M const& m, N const& n, O const& o
0726 ) const
0727 {
0728 typedef typename impl::make_composite<
0729 OperationT, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
0730 >::composite_type ret_t;
0731
0732 return ret_t(
0733 op,
0734 as_actor<A>::convert(a),
0735 as_actor<B>::convert(b),
0736 as_actor<C>::convert(c),
0737 as_actor<D>::convert(d),
0738 as_actor<E>::convert(e),
0739 as_actor<F>::convert(f),
0740 as_actor<G>::convert(g),
0741 as_actor<H>::convert(h),
0742 as_actor<I>::convert(i),
0743 as_actor<J>::convert(j),
0744 as_actor<K>::convert(k),
0745 as_actor<L>::convert(l),
0746 as_actor<M>::convert(m),
0747 as_actor<N>::convert(n),
0748 as_actor<O>::convert(o)
0749 );
0750 }
0751
0752 #endif
0753 #endif
0754 #endif
0755 #endif
0756
0757
0758 }
0759
0760 #endif