Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:50:23

0001     ///////////////////////////////////////////////////////////////////////////////
0002     /// \file generate_by_value.hpp
0003     /// Contains definition of by_value_generator_\<\> class template.
0004     //
0005     //  Copyright 2008 Eric Niebler. Distributed under the Boost
0006     //  Software License, Version 1.0. (See accompanying file
0007     //  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0008     template<typename Tag , typename Arg0 >
0009     struct by_value_generator_<
0010         proto::expr<Tag, list1<Arg0>, 1>
0011     >
0012     {
0013         typedef
0014             list1<Arg0>
0015         src_args;
0016         typedef
0017             list1<
0018                 typename uncvref<Arg0 >::type
0019             >
0020         dst_args;
0021         typedef proto::expr<Tag, src_args, 1> src_type;
0022         typedef proto::expr<Tag, dst_args, 1> type;
0023         BOOST_FORCEINLINE
0024         static type const call(src_type const &e)
0025         {
0026             type that = {
0027                 e.child0
0028             };
0029             return that;
0030         }
0031     };
0032     template<typename Tag , typename Arg0 >
0033     struct by_value_generator_<
0034         proto::basic_expr<Tag, list1<Arg0>, 1>
0035     >
0036     {
0037         typedef
0038             list1<Arg0>
0039         src_args;
0040         typedef
0041             list1<
0042                 typename uncvref<Arg0 >::type
0043             >
0044         dst_args;
0045         typedef proto::basic_expr<Tag, src_args, 1> src_type;
0046         typedef proto::basic_expr<Tag, dst_args, 1> type;
0047         BOOST_FORCEINLINE
0048         static type const call(src_type const &e)
0049         {
0050             type that = {
0051                 e.child0
0052             };
0053             return that;
0054         }
0055     };
0056     template<typename Tag , typename Arg0 , typename Arg1 >
0057     struct by_value_generator_<
0058         proto::expr<Tag, list2<Arg0 , Arg1>, 2>
0059     >
0060     {
0061         typedef
0062             list2<Arg0 , Arg1>
0063         src_args;
0064         typedef
0065             list2<
0066                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type
0067             >
0068         dst_args;
0069         typedef proto::expr<Tag, src_args, 2> src_type;
0070         typedef proto::expr<Tag, dst_args, 2> type;
0071         BOOST_FORCEINLINE
0072         static type const call(src_type const &e)
0073         {
0074             type that = {
0075                 e.child0 , e.child1
0076             };
0077             return that;
0078         }
0079     };
0080     template<typename Tag , typename Arg0 , typename Arg1 >
0081     struct by_value_generator_<
0082         proto::basic_expr<Tag, list2<Arg0 , Arg1>, 2>
0083     >
0084     {
0085         typedef
0086             list2<Arg0 , Arg1>
0087         src_args;
0088         typedef
0089             list2<
0090                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type
0091             >
0092         dst_args;
0093         typedef proto::basic_expr<Tag, src_args, 2> src_type;
0094         typedef proto::basic_expr<Tag, dst_args, 2> type;
0095         BOOST_FORCEINLINE
0096         static type const call(src_type const &e)
0097         {
0098             type that = {
0099                 e.child0 , e.child1
0100             };
0101             return that;
0102         }
0103     };
0104     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 >
0105     struct by_value_generator_<
0106         proto::expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3>
0107     >
0108     {
0109         typedef
0110             list3<Arg0 , Arg1 , Arg2>
0111         src_args;
0112         typedef
0113             list3<
0114                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type
0115             >
0116         dst_args;
0117         typedef proto::expr<Tag, src_args, 3> src_type;
0118         typedef proto::expr<Tag, dst_args, 3> type;
0119         BOOST_FORCEINLINE
0120         static type const call(src_type const &e)
0121         {
0122             type that = {
0123                 e.child0 , e.child1 , e.child2
0124             };
0125             return that;
0126         }
0127     };
0128     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 >
0129     struct by_value_generator_<
0130         proto::basic_expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3>
0131     >
0132     {
0133         typedef
0134             list3<Arg0 , Arg1 , Arg2>
0135         src_args;
0136         typedef
0137             list3<
0138                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type
0139             >
0140         dst_args;
0141         typedef proto::basic_expr<Tag, src_args, 3> src_type;
0142         typedef proto::basic_expr<Tag, dst_args, 3> type;
0143         BOOST_FORCEINLINE
0144         static type const call(src_type const &e)
0145         {
0146             type that = {
0147                 e.child0 , e.child1 , e.child2
0148             };
0149             return that;
0150         }
0151     };
0152     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 >
0153     struct by_value_generator_<
0154         proto::expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4>
0155     >
0156     {
0157         typedef
0158             list4<Arg0 , Arg1 , Arg2 , Arg3>
0159         src_args;
0160         typedef
0161             list4<
0162                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type
0163             >
0164         dst_args;
0165         typedef proto::expr<Tag, src_args, 4> src_type;
0166         typedef proto::expr<Tag, dst_args, 4> type;
0167         BOOST_FORCEINLINE
0168         static type const call(src_type const &e)
0169         {
0170             type that = {
0171                 e.child0 , e.child1 , e.child2 , e.child3
0172             };
0173             return that;
0174         }
0175     };
0176     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 >
0177     struct by_value_generator_<
0178         proto::basic_expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4>
0179     >
0180     {
0181         typedef
0182             list4<Arg0 , Arg1 , Arg2 , Arg3>
0183         src_args;
0184         typedef
0185             list4<
0186                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type
0187             >
0188         dst_args;
0189         typedef proto::basic_expr<Tag, src_args, 4> src_type;
0190         typedef proto::basic_expr<Tag, dst_args, 4> type;
0191         BOOST_FORCEINLINE
0192         static type const call(src_type const &e)
0193         {
0194             type that = {
0195                 e.child0 , e.child1 , e.child2 , e.child3
0196             };
0197             return that;
0198         }
0199     };
0200     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 >
0201     struct by_value_generator_<
0202         proto::expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5>
0203     >
0204     {
0205         typedef
0206             list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>
0207         src_args;
0208         typedef
0209             list5<
0210                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type
0211             >
0212         dst_args;
0213         typedef proto::expr<Tag, src_args, 5> src_type;
0214         typedef proto::expr<Tag, dst_args, 5> type;
0215         BOOST_FORCEINLINE
0216         static type const call(src_type const &e)
0217         {
0218             type that = {
0219                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4
0220             };
0221             return that;
0222         }
0223     };
0224     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 >
0225     struct by_value_generator_<
0226         proto::basic_expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5>
0227     >
0228     {
0229         typedef
0230             list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>
0231         src_args;
0232         typedef
0233             list5<
0234                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type
0235             >
0236         dst_args;
0237         typedef proto::basic_expr<Tag, src_args, 5> src_type;
0238         typedef proto::basic_expr<Tag, dst_args, 5> type;
0239         BOOST_FORCEINLINE
0240         static type const call(src_type const &e)
0241         {
0242             type that = {
0243                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4
0244             };
0245             return that;
0246         }
0247     };
0248     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 >
0249     struct by_value_generator_<
0250         proto::expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6>
0251     >
0252     {
0253         typedef
0254             list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>
0255         src_args;
0256         typedef
0257             list6<
0258                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type
0259             >
0260         dst_args;
0261         typedef proto::expr<Tag, src_args, 6> src_type;
0262         typedef proto::expr<Tag, dst_args, 6> type;
0263         BOOST_FORCEINLINE
0264         static type const call(src_type const &e)
0265         {
0266             type that = {
0267                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5
0268             };
0269             return that;
0270         }
0271     };
0272     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 >
0273     struct by_value_generator_<
0274         proto::basic_expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6>
0275     >
0276     {
0277         typedef
0278             list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>
0279         src_args;
0280         typedef
0281             list6<
0282                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type
0283             >
0284         dst_args;
0285         typedef proto::basic_expr<Tag, src_args, 6> src_type;
0286         typedef proto::basic_expr<Tag, dst_args, 6> type;
0287         BOOST_FORCEINLINE
0288         static type const call(src_type const &e)
0289         {
0290             type that = {
0291                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5
0292             };
0293             return that;
0294         }
0295     };
0296     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 >
0297     struct by_value_generator_<
0298         proto::expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7>
0299     >
0300     {
0301         typedef
0302             list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>
0303         src_args;
0304         typedef
0305             list7<
0306                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type
0307             >
0308         dst_args;
0309         typedef proto::expr<Tag, src_args, 7> src_type;
0310         typedef proto::expr<Tag, dst_args, 7> type;
0311         BOOST_FORCEINLINE
0312         static type const call(src_type const &e)
0313         {
0314             type that = {
0315                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6
0316             };
0317             return that;
0318         }
0319     };
0320     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 >
0321     struct by_value_generator_<
0322         proto::basic_expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7>
0323     >
0324     {
0325         typedef
0326             list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>
0327         src_args;
0328         typedef
0329             list7<
0330                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type
0331             >
0332         dst_args;
0333         typedef proto::basic_expr<Tag, src_args, 7> src_type;
0334         typedef proto::basic_expr<Tag, dst_args, 7> type;
0335         BOOST_FORCEINLINE
0336         static type const call(src_type const &e)
0337         {
0338             type that = {
0339                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6
0340             };
0341             return that;
0342         }
0343     };
0344     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 >
0345     struct by_value_generator_<
0346         proto::expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8>
0347     >
0348     {
0349         typedef
0350             list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>
0351         src_args;
0352         typedef
0353             list8<
0354                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type
0355             >
0356         dst_args;
0357         typedef proto::expr<Tag, src_args, 8> src_type;
0358         typedef proto::expr<Tag, dst_args, 8> type;
0359         BOOST_FORCEINLINE
0360         static type const call(src_type const &e)
0361         {
0362             type that = {
0363                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7
0364             };
0365             return that;
0366         }
0367     };
0368     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 >
0369     struct by_value_generator_<
0370         proto::basic_expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8>
0371     >
0372     {
0373         typedef
0374             list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>
0375         src_args;
0376         typedef
0377             list8<
0378                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type
0379             >
0380         dst_args;
0381         typedef proto::basic_expr<Tag, src_args, 8> src_type;
0382         typedef proto::basic_expr<Tag, dst_args, 8> type;
0383         BOOST_FORCEINLINE
0384         static type const call(src_type const &e)
0385         {
0386             type that = {
0387                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7
0388             };
0389             return that;
0390         }
0391     };
0392     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 >
0393     struct by_value_generator_<
0394         proto::expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9>
0395     >
0396     {
0397         typedef
0398             list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>
0399         src_args;
0400         typedef
0401             list9<
0402                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type
0403             >
0404         dst_args;
0405         typedef proto::expr<Tag, src_args, 9> src_type;
0406         typedef proto::expr<Tag, dst_args, 9> type;
0407         BOOST_FORCEINLINE
0408         static type const call(src_type const &e)
0409         {
0410             type that = {
0411                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8
0412             };
0413             return that;
0414         }
0415     };
0416     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 >
0417     struct by_value_generator_<
0418         proto::basic_expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9>
0419     >
0420     {
0421         typedef
0422             list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>
0423         src_args;
0424         typedef
0425             list9<
0426                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type
0427             >
0428         dst_args;
0429         typedef proto::basic_expr<Tag, src_args, 9> src_type;
0430         typedef proto::basic_expr<Tag, dst_args, 9> type;
0431         BOOST_FORCEINLINE
0432         static type const call(src_type const &e)
0433         {
0434             type that = {
0435                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8
0436             };
0437             return that;
0438         }
0439     };
0440     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 >
0441     struct by_value_generator_<
0442         proto::expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10>
0443     >
0444     {
0445         typedef
0446             list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>
0447         src_args;
0448         typedef
0449             list10<
0450                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type
0451             >
0452         dst_args;
0453         typedef proto::expr<Tag, src_args, 10> src_type;
0454         typedef proto::expr<Tag, dst_args, 10> type;
0455         BOOST_FORCEINLINE
0456         static type const call(src_type const &e)
0457         {
0458             type that = {
0459                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9
0460             };
0461             return that;
0462         }
0463     };
0464     template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9 >
0465     struct by_value_generator_<
0466         proto::basic_expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10>
0467     >
0468     {
0469         typedef
0470             list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>
0471         src_args;
0472         typedef
0473             list10<
0474                 typename uncvref<Arg0 >::type , typename uncvref<Arg1 >::type , typename uncvref<Arg2 >::type , typename uncvref<Arg3 >::type , typename uncvref<Arg4 >::type , typename uncvref<Arg5 >::type , typename uncvref<Arg6 >::type , typename uncvref<Arg7 >::type , typename uncvref<Arg8 >::type , typename uncvref<Arg9 >::type
0475             >
0476         dst_args;
0477         typedef proto::basic_expr<Tag, src_args, 10> src_type;
0478         typedef proto::basic_expr<Tag, dst_args, 10> type;
0479         BOOST_FORCEINLINE
0480         static type const call(src_type const &e)
0481         {
0482             type that = {
0483                 e.child0 , e.child1 , e.child2 , e.child3 , e.child4 , e.child5 , e.child6 , e.child7 , e.child8 , e.child9
0484             };
0485             return that;
0486         }
0487     };