Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:44:34

0001 /*=============================================================================
0002     Copyright (c) 2005-2010 Joel de Guzman
0003     Copyright (c) 2010 Eric Niebler
0004     Copyright (c) 2010 Thomas Heller
0005 
0006     Distributed under the Boost Software License, Version 1.0. (See accompanying
0007     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0008 ==============================================================================*/
0009     template <
0010         template <typename> class Actor
0011       , typename Tag
0012       , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void
0013       , typename Dummy = void>
0014     struct expr_ext;
0015     template <
0016         typename Tag
0017       , typename A0 = void , typename A1 = void , typename A2 = void , typename A3 = void , typename A4 = void , typename A5 = void , typename A6 = void , typename A7 = void , typename A8 = void , typename A9 = void
0018       , typename Dummy = void
0019     >
0020     struct expr : expr_ext<actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> {};
0021     
0022     
0023     
0024     
0025     
0026     
0027     
0028     template <template <typename> class Actor, typename Tag, typename A0>
0029     struct expr_ext<Actor, Tag, A0>
0030         : proto::transform<expr_ext<Actor, Tag, A0>, int>
0031     {
0032         typedef
0033             typename proto::result_of::make_expr<
0034                 Tag
0035               , phoenix_default_domain 
0036               , typename proto::detail::uncvref<A0>::type
0037             >::type
0038             base_type;
0039         typedef Actor<base_type> type;
0040         typedef
0041             typename proto::nary_expr<Tag, A0>::proto_grammar
0042             proto_grammar;
0043         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0)
0044       { 
0045         
0046                 actor<base_type> const e =
0047                 {
0048                     proto::make_expr<
0049                         Tag
0050                       , phoenix_default_domain 
0051                     >(a0)
0052                 };
0053             return e;
0054         }
0055         template<typename Expr, typename State, typename Data>
0056         struct impl
0057           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0058         {};
0059         typedef Tag proto_tag;
0060         typedef A0 proto_child0;
0061     };
0062     
0063     
0064     
0065     
0066     
0067     
0068     
0069     template <template <typename> class Actor, typename Tag, typename A0 , typename A1>
0070     struct expr_ext<Actor, Tag, A0 , A1>
0071         : proto::transform<expr_ext<Actor, Tag, A0 , A1>, int>
0072     {
0073         typedef
0074             typename proto::result_of::make_expr<
0075                 Tag
0076               , phoenix_default_domain 
0077               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type
0078             >::type
0079             base_type;
0080         typedef Actor<base_type> type;
0081         typedef
0082             typename proto::nary_expr<Tag, A0 , A1>::proto_grammar
0083             proto_grammar;
0084         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1)
0085       { 
0086         
0087                 actor<base_type> const e =
0088                 {
0089                     proto::make_expr<
0090                         Tag
0091                       , phoenix_default_domain 
0092                     >(a0 , a1)
0093                 };
0094             return e;
0095         }
0096         template<typename Expr, typename State, typename Data>
0097         struct impl
0098           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0099         {};
0100         typedef Tag proto_tag;
0101         typedef A0 proto_child0; typedef A1 proto_child1;
0102     };
0103     
0104     
0105     
0106     
0107     
0108     
0109     
0110     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2>
0111     struct expr_ext<Actor, Tag, A0 , A1 , A2>
0112         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2>, int>
0113     {
0114         typedef
0115             typename proto::result_of::make_expr<
0116                 Tag
0117               , phoenix_default_domain 
0118               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type
0119             >::type
0120             base_type;
0121         typedef Actor<base_type> type;
0122         typedef
0123             typename proto::nary_expr<Tag, A0 , A1 , A2>::proto_grammar
0124             proto_grammar;
0125         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2)
0126       { 
0127         
0128                 actor<base_type> const e =
0129                 {
0130                     proto::make_expr<
0131                         Tag
0132                       , phoenix_default_domain 
0133                     >(a0 , a1 , a2)
0134                 };
0135             return e;
0136         }
0137         template<typename Expr, typename State, typename Data>
0138         struct impl
0139           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0140         {};
0141         typedef Tag proto_tag;
0142         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2;
0143     };
0144     
0145     
0146     
0147     
0148     
0149     
0150     
0151     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3>
0152     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3>
0153         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3>, int>
0154     {
0155         typedef
0156             typename proto::result_of::make_expr<
0157                 Tag
0158               , phoenix_default_domain 
0159               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type
0160             >::type
0161             base_type;
0162         typedef Actor<base_type> type;
0163         typedef
0164             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3>::proto_grammar
0165             proto_grammar;
0166         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3)
0167       { 
0168         
0169                 actor<base_type> const e =
0170                 {
0171                     proto::make_expr<
0172                         Tag
0173                       , phoenix_default_domain 
0174                     >(a0 , a1 , a2 , a3)
0175                 };
0176             return e;
0177         }
0178         template<typename Expr, typename State, typename Data>
0179         struct impl
0180           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0181         {};
0182         typedef Tag proto_tag;
0183         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3;
0184     };
0185     
0186     
0187     
0188     
0189     
0190     
0191     
0192     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
0193     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4>
0194         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4>, int>
0195     {
0196         typedef
0197             typename proto::result_of::make_expr<
0198                 Tag
0199               , phoenix_default_domain 
0200               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type
0201             >::type
0202             base_type;
0203         typedef Actor<base_type> type;
0204         typedef
0205             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4>::proto_grammar
0206             proto_grammar;
0207         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4)
0208       { 
0209         
0210                 actor<base_type> const e =
0211                 {
0212                     proto::make_expr<
0213                         Tag
0214                       , phoenix_default_domain 
0215                     >(a0 , a1 , a2 , a3 , a4)
0216                 };
0217             return e;
0218         }
0219         template<typename Expr, typename State, typename Data>
0220         struct impl
0221           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0222         {};
0223         typedef Tag proto_tag;
0224         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4;
0225     };
0226     
0227     
0228     
0229     
0230     
0231     
0232     
0233     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
0234     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5>
0235         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5>, int>
0236     {
0237         typedef
0238             typename proto::result_of::make_expr<
0239                 Tag
0240               , phoenix_default_domain 
0241               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type , typename proto::detail::uncvref<A5>::type
0242             >::type
0243             base_type;
0244         typedef Actor<base_type> type;
0245         typedef
0246             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4 , A5>::proto_grammar
0247             proto_grammar;
0248         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4 , typename boost::add_reference<typename boost::add_const<A5>::type>::type a5)
0249       { 
0250         
0251                 actor<base_type> const e =
0252                 {
0253                     proto::make_expr<
0254                         Tag
0255                       , phoenix_default_domain 
0256                     >(a0 , a1 , a2 , a3 , a4 , a5)
0257                 };
0258             return e;
0259         }
0260         template<typename Expr, typename State, typename Data>
0261         struct impl
0262           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0263         {};
0264         typedef Tag proto_tag;
0265         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5;
0266     };
0267     
0268     
0269     
0270     
0271     
0272     
0273     
0274     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
0275     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6>
0276         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6>, int>
0277     {
0278         typedef
0279             typename proto::result_of::make_expr<
0280                 Tag
0281               , phoenix_default_domain 
0282               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type , typename proto::detail::uncvref<A5>::type , typename proto::detail::uncvref<A6>::type
0283             >::type
0284             base_type;
0285         typedef Actor<base_type> type;
0286         typedef
0287             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6>::proto_grammar
0288             proto_grammar;
0289         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4 , typename boost::add_reference<typename boost::add_const<A5>::type>::type a5 , typename boost::add_reference<typename boost::add_const<A6>::type>::type a6)
0290       { 
0291         
0292                 actor<base_type> const e =
0293                 {
0294                     proto::make_expr<
0295                         Tag
0296                       , phoenix_default_domain 
0297                     >(a0 , a1 , a2 , a3 , a4 , a5 , a6)
0298                 };
0299             return e;
0300         }
0301         template<typename Expr, typename State, typename Data>
0302         struct impl
0303           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0304         {};
0305         typedef Tag proto_tag;
0306         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6;
0307     };
0308     
0309     
0310     
0311     
0312     
0313     
0314     
0315     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
0316     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
0317         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>, int>
0318     {
0319         typedef
0320             typename proto::result_of::make_expr<
0321                 Tag
0322               , phoenix_default_domain 
0323               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type , typename proto::detail::uncvref<A5>::type , typename proto::detail::uncvref<A6>::type , typename proto::detail::uncvref<A7>::type
0324             >::type
0325             base_type;
0326         typedef Actor<base_type> type;
0327         typedef
0328             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>::proto_grammar
0329             proto_grammar;
0330         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4 , typename boost::add_reference<typename boost::add_const<A5>::type>::type a5 , typename boost::add_reference<typename boost::add_const<A6>::type>::type a6 , typename boost::add_reference<typename boost::add_const<A7>::type>::type a7)
0331       { 
0332         
0333                 actor<base_type> const e =
0334                 {
0335                     proto::make_expr<
0336                         Tag
0337                       , phoenix_default_domain 
0338                     >(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7)
0339                 };
0340             return e;
0341         }
0342         template<typename Expr, typename State, typename Data>
0343         struct impl
0344           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0345         {};
0346         typedef Tag proto_tag;
0347         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7;
0348     };
0349     
0350     
0351     
0352     
0353     
0354     
0355     
0356     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
0357     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
0358         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>, int>
0359     {
0360         typedef
0361             typename proto::result_of::make_expr<
0362                 Tag
0363               , phoenix_default_domain 
0364               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type , typename proto::detail::uncvref<A5>::type , typename proto::detail::uncvref<A6>::type , typename proto::detail::uncvref<A7>::type , typename proto::detail::uncvref<A8>::type
0365             >::type
0366             base_type;
0367         typedef Actor<base_type> type;
0368         typedef
0369             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>::proto_grammar
0370             proto_grammar;
0371         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4 , typename boost::add_reference<typename boost::add_const<A5>::type>::type a5 , typename boost::add_reference<typename boost::add_const<A6>::type>::type a6 , typename boost::add_reference<typename boost::add_const<A7>::type>::type a7 , typename boost::add_reference<typename boost::add_const<A8>::type>::type a8)
0372       { 
0373         
0374                 actor<base_type> const e =
0375                 {
0376                     proto::make_expr<
0377                         Tag
0378                       , phoenix_default_domain 
0379                     >(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8)
0380                 };
0381             return e;
0382         }
0383         template<typename Expr, typename State, typename Data>
0384         struct impl
0385           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0386         {};
0387         typedef Tag proto_tag;
0388         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8;
0389     };
0390     
0391     
0392     
0393     
0394     
0395     
0396     
0397     template <template <typename> class Actor, typename Tag, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
0398     struct expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
0399         : proto::transform<expr_ext<Actor, Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>, int>
0400     {
0401         typedef
0402             typename proto::result_of::make_expr<
0403                 Tag
0404               , phoenix_default_domain 
0405               , typename proto::detail::uncvref<A0>::type , typename proto::detail::uncvref<A1>::type , typename proto::detail::uncvref<A2>::type , typename proto::detail::uncvref<A3>::type , typename proto::detail::uncvref<A4>::type , typename proto::detail::uncvref<A5>::type , typename proto::detail::uncvref<A6>::type , typename proto::detail::uncvref<A7>::type , typename proto::detail::uncvref<A8>::type , typename proto::detail::uncvref<A9>::type
0406             >::type
0407             base_type;
0408         typedef Actor<base_type> type;
0409         typedef
0410             typename proto::nary_expr<Tag, A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>::proto_grammar
0411             proto_grammar;
0412         static type make(typename boost::add_reference<typename boost::add_const<A0>::type>::type a0 , typename boost::add_reference<typename boost::add_const<A1>::type>::type a1 , typename boost::add_reference<typename boost::add_const<A2>::type>::type a2 , typename boost::add_reference<typename boost::add_const<A3>::type>::type a3 , typename boost::add_reference<typename boost::add_const<A4>::type>::type a4 , typename boost::add_reference<typename boost::add_const<A5>::type>::type a5 , typename boost::add_reference<typename boost::add_const<A6>::type>::type a6 , typename boost::add_reference<typename boost::add_const<A7>::type>::type a7 , typename boost::add_reference<typename boost::add_const<A8>::type>::type a8 , typename boost::add_reference<typename boost::add_const<A9>::type>::type a9)
0413       { 
0414         
0415                 actor<base_type> const e =
0416                 {
0417                     proto::make_expr<
0418                         Tag
0419                       , phoenix_default_domain 
0420                     >(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9)
0421                 };
0422             return e;
0423         }
0424         template<typename Expr, typename State, typename Data>
0425         struct impl
0426           : proto::pass_through<expr_ext>::template impl<Expr, State, Data>
0427         {};
0428         typedef Tag proto_tag;
0429         typedef A0 proto_child0; typedef A1 proto_child1; typedef A2 proto_child2; typedef A3 proto_child3; typedef A4 proto_child4; typedef A5 proto_child5; typedef A6 proto_child6; typedef A7 proto_child7; typedef A8 proto_child8; typedef A9 proto_child9;
0430     };