File indexing completed on 2025-01-18 09:50:23
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 template<typename Expr, typename Domain >
0011 struct funop0
0012 {
0013 typedef typename proto::base_expr<
0014 Domain
0015 , tag::function
0016 , list1<
0017 Expr &
0018
0019 >
0020 >::type type;
0021 BOOST_FORCEINLINE
0022 static type const call(
0023 Expr &e
0024
0025 )
0026 {
0027 type that = {
0028 e
0029
0030 };
0031 return that;
0032 }
0033 };
0034
0035
0036 template<typename Expr , typename This, typename Domain>
0037 struct funop<Expr(), This, Domain>
0038 : funop0<
0039 typename detail::same_cv<Expr, This>::type
0040 , Domain
0041
0042 >
0043 {};
0044
0045
0046 template<typename Expr, typename Domain , typename A0>
0047 struct funop1
0048 {
0049 typedef typename proto::base_expr<
0050 Domain
0051 , tag::function
0052 , list2<
0053 Expr &
0054 , typename proto::result_of::as_child<A0, Domain>::type
0055 >
0056 >::type type;
0057 BOOST_FORCEINLINE
0058 static type const call(
0059 Expr &e
0060 , A0 &a0
0061 )
0062 {
0063 type that = {
0064 e
0065 , proto::as_child<Domain>(a0)
0066 };
0067 return that;
0068 }
0069 };
0070
0071
0072 template<typename Expr , typename A0, typename This, typename Domain>
0073 struct funop<Expr(A0), This, Domain>
0074 : funop1<
0075 typename detail::same_cv<Expr, This>::type
0076 , Domain
0077 , typename remove_reference<A0 >::type
0078 >
0079 {};
0080
0081
0082 template<typename Expr, typename Domain , typename A0 , typename A1>
0083 struct funop2
0084 {
0085 typedef typename proto::base_expr<
0086 Domain
0087 , tag::function
0088 , list3<
0089 Expr &
0090 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type
0091 >
0092 >::type type;
0093 BOOST_FORCEINLINE
0094 static type const call(
0095 Expr &e
0096 , A0 &a0 , A1 &a1
0097 )
0098 {
0099 type that = {
0100 e
0101 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1)
0102 };
0103 return that;
0104 }
0105 };
0106
0107
0108 template<typename Expr , typename A0 , typename A1, typename This, typename Domain>
0109 struct funop<Expr(A0 , A1), This, Domain>
0110 : funop2<
0111 typename detail::same_cv<Expr, This>::type
0112 , Domain
0113 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type
0114 >
0115 {};
0116
0117
0118 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2>
0119 struct funop3
0120 {
0121 typedef typename proto::base_expr<
0122 Domain
0123 , tag::function
0124 , list4<
0125 Expr &
0126 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type
0127 >
0128 >::type type;
0129 BOOST_FORCEINLINE
0130 static type const call(
0131 Expr &e
0132 , A0 &a0 , A1 &a1 , A2 &a2
0133 )
0134 {
0135 type that = {
0136 e
0137 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2)
0138 };
0139 return that;
0140 }
0141 };
0142
0143
0144 template<typename Expr , typename A0 , typename A1 , typename A2, typename This, typename Domain>
0145 struct funop<Expr(A0 , A1 , A2), This, Domain>
0146 : funop3<
0147 typename detail::same_cv<Expr, This>::type
0148 , Domain
0149 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type
0150 >
0151 {};
0152
0153
0154 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3>
0155 struct funop4
0156 {
0157 typedef typename proto::base_expr<
0158 Domain
0159 , tag::function
0160 , list5<
0161 Expr &
0162 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type
0163 >
0164 >::type type;
0165 BOOST_FORCEINLINE
0166 static type const call(
0167 Expr &e
0168 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3
0169 )
0170 {
0171 type that = {
0172 e
0173 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3)
0174 };
0175 return that;
0176 }
0177 };
0178
0179
0180 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3, typename This, typename Domain>
0181 struct funop<Expr(A0 , A1 , A2 , A3), This, Domain>
0182 : funop4<
0183 typename detail::same_cv<Expr, This>::type
0184 , Domain
0185 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type
0186 >
0187 {};
0188
0189
0190 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
0191 struct funop5
0192 {
0193 typedef typename proto::base_expr<
0194 Domain
0195 , tag::function
0196 , list6<
0197 Expr &
0198 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type
0199 >
0200 >::type type;
0201 BOOST_FORCEINLINE
0202 static type const call(
0203 Expr &e
0204 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4
0205 )
0206 {
0207 type that = {
0208 e
0209 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4)
0210 };
0211 return that;
0212 }
0213 };
0214
0215
0216 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4, typename This, typename Domain>
0217 struct funop<Expr(A0 , A1 , A2 , A3 , A4), This, Domain>
0218 : funop5<
0219 typename detail::same_cv<Expr, This>::type
0220 , Domain
0221 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type
0222 >
0223 {};
0224
0225
0226 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
0227 struct funop6
0228 {
0229 typedef typename proto::base_expr<
0230 Domain
0231 , tag::function
0232 , list7<
0233 Expr &
0234 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type
0235 >
0236 >::type type;
0237 BOOST_FORCEINLINE
0238 static type const call(
0239 Expr &e
0240 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5
0241 )
0242 {
0243 type that = {
0244 e
0245 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5)
0246 };
0247 return that;
0248 }
0249 };
0250
0251
0252 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5, typename This, typename Domain>
0253 struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5), This, Domain>
0254 : funop6<
0255 typename detail::same_cv<Expr, This>::type
0256 , Domain
0257 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type
0258 >
0259 {};
0260
0261
0262 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
0263 struct funop7
0264 {
0265 typedef typename proto::base_expr<
0266 Domain
0267 , tag::function
0268 , list8<
0269 Expr &
0270 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type
0271 >
0272 >::type type;
0273 BOOST_FORCEINLINE
0274 static type const call(
0275 Expr &e
0276 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6
0277 )
0278 {
0279 type that = {
0280 e
0281 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6)
0282 };
0283 return that;
0284 }
0285 };
0286
0287
0288 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6, typename This, typename Domain>
0289 struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6), This, Domain>
0290 : funop7<
0291 typename detail::same_cv<Expr, This>::type
0292 , Domain
0293 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type
0294 >
0295 {};
0296
0297
0298 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
0299 struct funop8
0300 {
0301 typedef typename proto::base_expr<
0302 Domain
0303 , tag::function
0304 , list9<
0305 Expr &
0306 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type , typename proto::result_of::as_child<A7, Domain>::type
0307 >
0308 >::type type;
0309 BOOST_FORCEINLINE
0310 static type const call(
0311 Expr &e
0312 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7
0313 )
0314 {
0315 type that = {
0316 e
0317 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6) , proto::as_child<Domain>(a7)
0318 };
0319 return that;
0320 }
0321 };
0322
0323
0324 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7, typename This, typename Domain>
0325 struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7), This, Domain>
0326 : funop8<
0327 typename detail::same_cv<Expr, This>::type
0328 , Domain
0329 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type , typename remove_reference<A7 >::type
0330 >
0331 {};
0332
0333
0334 template<typename Expr, typename Domain , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
0335 struct funop9
0336 {
0337 typedef typename proto::base_expr<
0338 Domain
0339 , tag::function
0340 , list10<
0341 Expr &
0342 , typename proto::result_of::as_child<A0, Domain>::type , typename proto::result_of::as_child<A1, Domain>::type , typename proto::result_of::as_child<A2, Domain>::type , typename proto::result_of::as_child<A3, Domain>::type , typename proto::result_of::as_child<A4, Domain>::type , typename proto::result_of::as_child<A5, Domain>::type , typename proto::result_of::as_child<A6, Domain>::type , typename proto::result_of::as_child<A7, Domain>::type , typename proto::result_of::as_child<A8, Domain>::type
0343 >
0344 >::type type;
0345 BOOST_FORCEINLINE
0346 static type const call(
0347 Expr &e
0348 , A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8
0349 )
0350 {
0351 type that = {
0352 e
0353 , proto::as_child<Domain>(a0) , proto::as_child<Domain>(a1) , proto::as_child<Domain>(a2) , proto::as_child<Domain>(a3) , proto::as_child<Domain>(a4) , proto::as_child<Domain>(a5) , proto::as_child<Domain>(a6) , proto::as_child<Domain>(a7) , proto::as_child<Domain>(a8)
0354 };
0355 return that;
0356 }
0357 };
0358
0359
0360 template<typename Expr , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8, typename This, typename Domain>
0361 struct funop<Expr(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8), This, Domain>
0362 : funop9<
0363 typename detail::same_cv<Expr, This>::type
0364 , Domain
0365 , typename remove_reference<A0 >::type , typename remove_reference<A1 >::type , typename remove_reference<A2 >::type , typename remove_reference<A3 >::type , typename remove_reference<A4 >::type , typename remove_reference<A5 >::type , typename remove_reference<A6 >::type , typename remove_reference<A7 >::type , typename remove_reference<A8 >::type
0366 >
0367 {};