Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-23 09:48:22

0001 /*=============================================================================
0002     Copyright (c) 2001-2007 Joel de Guzman
0003 
0004     Distributed under the Boost Software License, Version 1.0. (See accompanying 
0005     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0006 ==============================================================================*/
0007     
0008     
0009     
0010     
0011     
0012     
0013     
0014     template <>
0015     struct member_function_ptr_impl<1>
0016     {
0017         template <typename RT, typename FP>
0018         struct impl
0019         {
0020             typedef RT result_type;
0021             impl(FP fp_)
0022                 : fp(fp_) {}
0023             template <typename Class, typename A0>
0024             RT operator()(Class& obj, A0 & a0) const
0025             {
0026                 BOOST_PROTO_USE_GET_POINTER();
0027                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0028                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0);
0029             }
0030             template <typename Class, typename A0>
0031             RT operator()(Class* obj, A0 & a0) const
0032             {
0033                 return (obj->*fp)(a0);
0034             }
0035             FP fp;
0036         };
0037     };
0038     
0039     
0040     
0041     
0042     
0043     
0044     
0045     template <>
0046     struct member_function_ptr_impl<2>
0047     {
0048         template <typename RT, typename FP>
0049         struct impl
0050         {
0051             typedef RT result_type;
0052             impl(FP fp_)
0053                 : fp(fp_) {}
0054             template <typename Class, typename A0 , typename A1>
0055             RT operator()(Class& obj, A0 & a0 , A1 & a1) const
0056             {
0057                 BOOST_PROTO_USE_GET_POINTER();
0058                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0059                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1);
0060             }
0061             template <typename Class, typename A0 , typename A1>
0062             RT operator()(Class* obj, A0 & a0 , A1 & a1) const
0063             {
0064                 return (obj->*fp)(a0 , a1);
0065             }
0066             FP fp;
0067         };
0068     };
0069     
0070     
0071     
0072     
0073     
0074     
0075     
0076     template <>
0077     struct member_function_ptr_impl<3>
0078     {
0079         template <typename RT, typename FP>
0080         struct impl
0081         {
0082             typedef RT result_type;
0083             impl(FP fp_)
0084                 : fp(fp_) {}
0085             template <typename Class, typename A0 , typename A1 , typename A2>
0086             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2) const
0087             {
0088                 BOOST_PROTO_USE_GET_POINTER();
0089                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0090                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2);
0091             }
0092             template <typename Class, typename A0 , typename A1 , typename A2>
0093             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2) const
0094             {
0095                 return (obj->*fp)(a0 , a1 , a2);
0096             }
0097             FP fp;
0098         };
0099     };
0100     
0101     
0102     
0103     
0104     
0105     
0106     
0107     template <>
0108     struct member_function_ptr_impl<4>
0109     {
0110         template <typename RT, typename FP>
0111         struct impl
0112         {
0113             typedef RT result_type;
0114             impl(FP fp_)
0115                 : fp(fp_) {}
0116             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
0117             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
0118             {
0119                 BOOST_PROTO_USE_GET_POINTER();
0120                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0121                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3);
0122             }
0123             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3>
0124             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3) const
0125             {
0126                 return (obj->*fp)(a0 , a1 , a2 , a3);
0127             }
0128             FP fp;
0129         };
0130     };
0131     
0132     
0133     
0134     
0135     
0136     
0137     
0138     template <>
0139     struct member_function_ptr_impl<5>
0140     {
0141         template <typename RT, typename FP>
0142         struct impl
0143         {
0144             typedef RT result_type;
0145             impl(FP fp_)
0146                 : fp(fp_) {}
0147             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
0148             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
0149             {
0150                 BOOST_PROTO_USE_GET_POINTER();
0151                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0152                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4);
0153             }
0154             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
0155             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4) const
0156             {
0157                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4);
0158             }
0159             FP fp;
0160         };
0161     };
0162     
0163     
0164     
0165     
0166     
0167     
0168     
0169     template <>
0170     struct member_function_ptr_impl<6>
0171     {
0172         template <typename RT, typename FP>
0173         struct impl
0174         {
0175             typedef RT result_type;
0176             impl(FP fp_)
0177                 : fp(fp_) {}
0178             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
0179             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
0180             {
0181                 BOOST_PROTO_USE_GET_POINTER();
0182                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0183                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5);
0184             }
0185             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
0186             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5) const
0187             {
0188                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4 , a5);
0189             }
0190             FP fp;
0191         };
0192     };
0193     
0194     
0195     
0196     
0197     
0198     
0199     
0200     template <>
0201     struct member_function_ptr_impl<7>
0202     {
0203         template <typename RT, typename FP>
0204         struct impl
0205         {
0206             typedef RT result_type;
0207             impl(FP fp_)
0208                 : fp(fp_) {}
0209             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
0210             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
0211             {
0212                 BOOST_PROTO_USE_GET_POINTER();
0213                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0214                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6);
0215             }
0216             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
0217             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6) const
0218             {
0219                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6);
0220             }
0221             FP fp;
0222         };
0223     };
0224     
0225     
0226     
0227     
0228     
0229     
0230     
0231     template <>
0232     struct member_function_ptr_impl<8>
0233     {
0234         template <typename RT, typename FP>
0235         struct impl
0236         {
0237             typedef RT result_type;
0238             impl(FP fp_)
0239                 : fp(fp_) {}
0240             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
0241             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
0242             {
0243                 BOOST_PROTO_USE_GET_POINTER();
0244                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0245                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
0246             }
0247             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
0248             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7) const
0249             {
0250                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
0251             }
0252             FP fp;
0253         };
0254     };
0255     
0256     
0257     
0258     
0259     
0260     
0261     
0262     template <>
0263     struct member_function_ptr_impl<9>
0264     {
0265         template <typename RT, typename FP>
0266         struct impl
0267         {
0268             typedef RT result_type;
0269             impl(FP fp_)
0270                 : fp(fp_) {}
0271             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
0272             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
0273             {
0274                 BOOST_PROTO_USE_GET_POINTER();
0275                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0276                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
0277             }
0278             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
0279             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8) const
0280             {
0281                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
0282             }
0283             FP fp;
0284         };
0285     };
0286     
0287     
0288     
0289     
0290     
0291     
0292     
0293     template <>
0294     struct member_function_ptr_impl<10>
0295     {
0296         template <typename RT, typename FP>
0297         struct impl
0298         {
0299             typedef RT result_type;
0300             impl(FP fp_)
0301                 : fp(fp_) {}
0302             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
0303             RT operator()(Class& obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
0304             {
0305                 BOOST_PROTO_USE_GET_POINTER();
0306                 typedef typename proto::detail::class_member_traits<FP>::class_type class_type;
0307                 return (BOOST_PROTO_GET_POINTER(class_type, obj)->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
0308             }
0309             template <typename Class, typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
0310             RT operator()(Class* obj, A0 & a0 , A1 & a1 , A2 & a2 , A3 & a3 , A4 & a4 , A5 & a5 , A6 & a6 , A7 & a7 , A8 & a8 , A9 & a9) const
0311             {
0312                 return (obj->*fp)(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
0313             }
0314             FP fp;
0315         };
0316     };