1 /*============================================================================== 2 Copyright (c) 2005-2010 Joel de Guzman 3 Copyright (c) 2010 Thomas Heller 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 ==============================================================================*/ 8 9 namespace detail 10 { 11 12 13 14 15 16 17 18 19 template <typename Fun, typename Expr, typename State, typename Data> 20 struct call_impl<Fun, Expr, State, Data, 1> 21 : proto::transform_impl<Expr, State, Data> 22 { 23 typedef 24 typename boost::phoenix::result_of::context<State, Data>::type 25 context_type; 26 typedef typename proto::result_of::child_c<Expr, 0>::type A0; 27 typedef 28 typename boost::result_of< 29 Fun(A0, context_type) 30 >::type 31 result_type; operator ()detail::call_impl32 result_type operator()( 33 typename call_impl::expr_param e 34 , typename call_impl::state_param s 35 , typename call_impl::data_param d 36 ) const 37 { 38 return 39 Fun()( 40 proto::child_c< 0>(e) 41 , boost::phoenix::context(s, d) 42 ); 43 } 44 }; 45 46 47 48 49 50 51 52 53 template <typename Fun, typename Expr, typename State, typename Data> 54 struct call_impl<Fun, Expr, State, Data, 2> 55 : proto::transform_impl<Expr, State, Data> 56 { 57 typedef 58 typename boost::phoenix::result_of::context<State, Data>::type 59 context_type; 60 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; 61 typedef 62 typename boost::result_of< 63 Fun(A0 , A1, context_type) 64 >::type 65 result_type; operator ()detail::call_impl66 result_type operator()( 67 typename call_impl::expr_param e 68 , typename call_impl::state_param s 69 , typename call_impl::data_param d 70 ) const 71 { 72 return 73 Fun()( 74 proto::child_c< 0>(e) , proto::child_c< 1>(e) 75 , boost::phoenix::context(s, d) 76 ); 77 } 78 }; 79 80 81 82 83 84 85 86 87 template <typename Fun, typename Expr, typename State, typename Data> 88 struct call_impl<Fun, Expr, State, Data, 3> 89 : proto::transform_impl<Expr, State, Data> 90 { 91 typedef 92 typename boost::phoenix::result_of::context<State, Data>::type 93 context_type; 94 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; 95 typedef 96 typename boost::result_of< 97 Fun(A0 , A1 , A2, context_type) 98 >::type 99 result_type; operator ()detail::call_impl100 result_type operator()( 101 typename call_impl::expr_param e 102 , typename call_impl::state_param s 103 , typename call_impl::data_param d 104 ) const 105 { 106 return 107 Fun()( 108 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) 109 , boost::phoenix::context(s, d) 110 ); 111 } 112 }; 113 114 115 116 117 118 119 120 121 template <typename Fun, typename Expr, typename State, typename Data> 122 struct call_impl<Fun, Expr, State, Data, 4> 123 : proto::transform_impl<Expr, State, Data> 124 { 125 typedef 126 typename boost::phoenix::result_of::context<State, Data>::type 127 context_type; 128 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; 129 typedef 130 typename boost::result_of< 131 Fun(A0 , A1 , A2 , A3, context_type) 132 >::type 133 result_type; operator ()detail::call_impl134 result_type operator()( 135 typename call_impl::expr_param e 136 , typename call_impl::state_param s 137 , typename call_impl::data_param d 138 ) const 139 { 140 return 141 Fun()( 142 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) 143 , boost::phoenix::context(s, d) 144 ); 145 } 146 }; 147 148 149 150 151 152 153 154 155 template <typename Fun, typename Expr, typename State, typename Data> 156 struct call_impl<Fun, Expr, State, Data, 5> 157 : proto::transform_impl<Expr, State, Data> 158 { 159 typedef 160 typename boost::phoenix::result_of::context<State, Data>::type 161 context_type; 162 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; 163 typedef 164 typename boost::result_of< 165 Fun(A0 , A1 , A2 , A3 , A4, context_type) 166 >::type 167 result_type; operator ()detail::call_impl168 result_type operator()( 169 typename call_impl::expr_param e 170 , typename call_impl::state_param s 171 , typename call_impl::data_param d 172 ) const 173 { 174 return 175 Fun()( 176 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) 177 , boost::phoenix::context(s, d) 178 ); 179 } 180 }; 181 182 183 184 185 186 187 188 189 template <typename Fun, typename Expr, typename State, typename Data> 190 struct call_impl<Fun, Expr, State, Data, 6> 191 : proto::transform_impl<Expr, State, Data> 192 { 193 typedef 194 typename boost::phoenix::result_of::context<State, Data>::type 195 context_type; 196 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; 197 typedef 198 typename boost::result_of< 199 Fun(A0 , A1 , A2 , A3 , A4 , A5, context_type) 200 >::type 201 result_type; operator ()detail::call_impl202 result_type operator()( 203 typename call_impl::expr_param e 204 , typename call_impl::state_param s 205 , typename call_impl::data_param d 206 ) const 207 { 208 return 209 Fun()( 210 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) 211 , boost::phoenix::context(s, d) 212 ); 213 } 214 }; 215 216 217 218 219 220 221 222 223 template <typename Fun, typename Expr, typename State, typename Data> 224 struct call_impl<Fun, Expr, State, Data, 7> 225 : proto::transform_impl<Expr, State, Data> 226 { 227 typedef 228 typename boost::phoenix::result_of::context<State, Data>::type 229 context_type; 230 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; 231 typedef 232 typename boost::result_of< 233 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6, context_type) 234 >::type 235 result_type; operator ()detail::call_impl236 result_type operator()( 237 typename call_impl::expr_param e 238 , typename call_impl::state_param s 239 , typename call_impl::data_param d 240 ) const 241 { 242 return 243 Fun()( 244 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) 245 , boost::phoenix::context(s, d) 246 ); 247 } 248 }; 249 250 251 252 253 254 255 256 257 template <typename Fun, typename Expr, typename State, typename Data> 258 struct call_impl<Fun, Expr, State, Data, 8> 259 : proto::transform_impl<Expr, State, Data> 260 { 261 typedef 262 typename boost::phoenix::result_of::context<State, Data>::type 263 context_type; 264 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; 265 typedef 266 typename boost::result_of< 267 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7, context_type) 268 >::type 269 result_type; operator ()detail::call_impl270 result_type operator()( 271 typename call_impl::expr_param e 272 , typename call_impl::state_param s 273 , typename call_impl::data_param d 274 ) const 275 { 276 return 277 Fun()( 278 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) 279 , boost::phoenix::context(s, d) 280 ); 281 } 282 }; 283 284 285 286 287 288 289 290 291 template <typename Fun, typename Expr, typename State, typename Data> 292 struct call_impl<Fun, Expr, State, Data, 9> 293 : proto::transform_impl<Expr, State, Data> 294 { 295 typedef 296 typename boost::phoenix::result_of::context<State, Data>::type 297 context_type; 298 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; 299 typedef 300 typename boost::result_of< 301 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8, context_type) 302 >::type 303 result_type; operator ()detail::call_impl304 result_type operator()( 305 typename call_impl::expr_param e 306 , typename call_impl::state_param s 307 , typename call_impl::data_param d 308 ) const 309 { 310 return 311 Fun()( 312 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) 313 , boost::phoenix::context(s, d) 314 ); 315 } 316 }; 317 318 319 320 321 322 323 324 325 template <typename Fun, typename Expr, typename State, typename Data> 326 struct call_impl<Fun, Expr, State, Data, 10> 327 : proto::transform_impl<Expr, State, Data> 328 { 329 typedef 330 typename boost::phoenix::result_of::context<State, Data>::type 331 context_type; 332 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; 333 typedef 334 typename boost::result_of< 335 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9, context_type) 336 >::type 337 result_type; operator ()detail::call_impl338 result_type operator()( 339 typename call_impl::expr_param e 340 , typename call_impl::state_param s 341 , typename call_impl::data_param d 342 ) const 343 { 344 return 345 Fun()( 346 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) 347 , boost::phoenix::context(s, d) 348 ); 349 } 350 }; 351 352 353 354 355 356 357 358 359 template <typename Fun, typename Expr, typename State, typename Data> 360 struct call_impl<Fun, Expr, State, Data, 11> 361 : proto::transform_impl<Expr, State, Data> 362 { 363 typedef 364 typename boost::phoenix::result_of::context<State, Data>::type 365 context_type; 366 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; 367 typedef 368 typename boost::result_of< 369 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10, context_type) 370 >::type 371 result_type; operator ()detail::call_impl372 result_type operator()( 373 typename call_impl::expr_param e 374 , typename call_impl::state_param s 375 , typename call_impl::data_param d 376 ) const 377 { 378 return 379 Fun()( 380 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) 381 , boost::phoenix::context(s, d) 382 ); 383 } 384 }; 385 386 387 388 389 390 391 392 393 template <typename Fun, typename Expr, typename State, typename Data> 394 struct call_impl<Fun, Expr, State, Data, 12> 395 : proto::transform_impl<Expr, State, Data> 396 { 397 typedef 398 typename boost::phoenix::result_of::context<State, Data>::type 399 context_type; 400 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; 401 typedef 402 typename boost::result_of< 403 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11, context_type) 404 >::type 405 result_type; operator ()detail::call_impl406 result_type operator()( 407 typename call_impl::expr_param e 408 , typename call_impl::state_param s 409 , typename call_impl::data_param d 410 ) const 411 { 412 return 413 Fun()( 414 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) 415 , boost::phoenix::context(s, d) 416 ); 417 } 418 }; 419 420 421 422 423 424 425 426 427 template <typename Fun, typename Expr, typename State, typename Data> 428 struct call_impl<Fun, Expr, State, Data, 13> 429 : proto::transform_impl<Expr, State, Data> 430 { 431 typedef 432 typename boost::phoenix::result_of::context<State, Data>::type 433 context_type; 434 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; 435 typedef 436 typename boost::result_of< 437 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12, context_type) 438 >::type 439 result_type; operator ()detail::call_impl440 result_type operator()( 441 typename call_impl::expr_param e 442 , typename call_impl::state_param s 443 , typename call_impl::data_param d 444 ) const 445 { 446 return 447 Fun()( 448 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) 449 , boost::phoenix::context(s, d) 450 ); 451 } 452 }; 453 454 455 456 457 458 459 460 461 template <typename Fun, typename Expr, typename State, typename Data> 462 struct call_impl<Fun, Expr, State, Data, 14> 463 : proto::transform_impl<Expr, State, Data> 464 { 465 typedef 466 typename boost::phoenix::result_of::context<State, Data>::type 467 context_type; 468 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; 469 typedef 470 typename boost::result_of< 471 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13, context_type) 472 >::type 473 result_type; operator ()detail::call_impl474 result_type operator()( 475 typename call_impl::expr_param e 476 , typename call_impl::state_param s 477 , typename call_impl::data_param d 478 ) const 479 { 480 return 481 Fun()( 482 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) 483 , boost::phoenix::context(s, d) 484 ); 485 } 486 }; 487 488 489 490 491 492 493 494 495 template <typename Fun, typename Expr, typename State, typename Data> 496 struct call_impl<Fun, Expr, State, Data, 15> 497 : proto::transform_impl<Expr, State, Data> 498 { 499 typedef 500 typename boost::phoenix::result_of::context<State, Data>::type 501 context_type; 502 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; 503 typedef 504 typename boost::result_of< 505 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14, context_type) 506 >::type 507 result_type; operator ()detail::call_impl508 result_type operator()( 509 typename call_impl::expr_param e 510 , typename call_impl::state_param s 511 , typename call_impl::data_param d 512 ) const 513 { 514 return 515 Fun()( 516 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) 517 , boost::phoenix::context(s, d) 518 ); 519 } 520 }; 521 522 523 524 525 526 527 528 529 template <typename Fun, typename Expr, typename State, typename Data> 530 struct call_impl<Fun, Expr, State, Data, 16> 531 : proto::transform_impl<Expr, State, Data> 532 { 533 typedef 534 typename boost::phoenix::result_of::context<State, Data>::type 535 context_type; 536 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; 537 typedef 538 typename boost::result_of< 539 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15, context_type) 540 >::type 541 result_type; operator ()detail::call_impl542 result_type operator()( 543 typename call_impl::expr_param e 544 , typename call_impl::state_param s 545 , typename call_impl::data_param d 546 ) const 547 { 548 return 549 Fun()( 550 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) 551 , boost::phoenix::context(s, d) 552 ); 553 } 554 }; 555 556 557 558 559 560 561 562 563 template <typename Fun, typename Expr, typename State, typename Data> 564 struct call_impl<Fun, Expr, State, Data, 17> 565 : proto::transform_impl<Expr, State, Data> 566 { 567 typedef 568 typename boost::phoenix::result_of::context<State, Data>::type 569 context_type; 570 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; 571 typedef 572 typename boost::result_of< 573 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16, context_type) 574 >::type 575 result_type; operator ()detail::call_impl576 result_type operator()( 577 typename call_impl::expr_param e 578 , typename call_impl::state_param s 579 , typename call_impl::data_param d 580 ) const 581 { 582 return 583 Fun()( 584 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) 585 , boost::phoenix::context(s, d) 586 ); 587 } 588 }; 589 590 591 592 593 594 595 596 597 template <typename Fun, typename Expr, typename State, typename Data> 598 struct call_impl<Fun, Expr, State, Data, 18> 599 : proto::transform_impl<Expr, State, Data> 600 { 601 typedef 602 typename boost::phoenix::result_of::context<State, Data>::type 603 context_type; 604 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17; 605 typedef 606 typename boost::result_of< 607 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17, context_type) 608 >::type 609 result_type; operator ()detail::call_impl610 result_type operator()( 611 typename call_impl::expr_param e 612 , typename call_impl::state_param s 613 , typename call_impl::data_param d 614 ) const 615 { 616 return 617 Fun()( 618 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e) 619 , boost::phoenix::context(s, d) 620 ); 621 } 622 }; 623 624 625 626 627 628 629 630 631 template <typename Fun, typename Expr, typename State, typename Data> 632 struct call_impl<Fun, Expr, State, Data, 19> 633 : proto::transform_impl<Expr, State, Data> 634 { 635 typedef 636 typename boost::phoenix::result_of::context<State, Data>::type 637 context_type; 638 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17; typedef typename proto::result_of::child_c<Expr, 18>::type A18; 639 typedef 640 typename boost::result_of< 641 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18, context_type) 642 >::type 643 result_type; operator ()detail::call_impl644 result_type operator()( 645 typename call_impl::expr_param e 646 , typename call_impl::state_param s 647 , typename call_impl::data_param d 648 ) const 649 { 650 return 651 Fun()( 652 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e) , proto::child_c< 18>(e) 653 , boost::phoenix::context(s, d) 654 ); 655 } 656 }; 657 658 659 660 661 662 663 664 665 template <typename Fun, typename Expr, typename State, typename Data> 666 struct call_impl<Fun, Expr, State, Data, 20> 667 : proto::transform_impl<Expr, State, Data> 668 { 669 typedef 670 typename boost::phoenix::result_of::context<State, Data>::type 671 context_type; 672 typedef typename proto::result_of::child_c<Expr, 0>::type A0; typedef typename proto::result_of::child_c<Expr, 1>::type A1; typedef typename proto::result_of::child_c<Expr, 2>::type A2; typedef typename proto::result_of::child_c<Expr, 3>::type A3; typedef typename proto::result_of::child_c<Expr, 4>::type A4; typedef typename proto::result_of::child_c<Expr, 5>::type A5; typedef typename proto::result_of::child_c<Expr, 6>::type A6; typedef typename proto::result_of::child_c<Expr, 7>::type A7; typedef typename proto::result_of::child_c<Expr, 8>::type A8; typedef typename proto::result_of::child_c<Expr, 9>::type A9; typedef typename proto::result_of::child_c<Expr, 10>::type A10; typedef typename proto::result_of::child_c<Expr, 11>::type A11; typedef typename proto::result_of::child_c<Expr, 12>::type A12; typedef typename proto::result_of::child_c<Expr, 13>::type A13; typedef typename proto::result_of::child_c<Expr, 14>::type A14; typedef typename proto::result_of::child_c<Expr, 15>::type A15; typedef typename proto::result_of::child_c<Expr, 16>::type A16; typedef typename proto::result_of::child_c<Expr, 17>::type A17; typedef typename proto::result_of::child_c<Expr, 18>::type A18; typedef typename proto::result_of::child_c<Expr, 19>::type A19; 673 typedef 674 typename boost::result_of< 675 Fun(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9 , A10 , A11 , A12 , A13 , A14 , A15 , A16 , A17 , A18 , A19, context_type) 676 >::type 677 result_type; operator ()detail::call_impl678 result_type operator()( 679 typename call_impl::expr_param e 680 , typename call_impl::state_param s 681 , typename call_impl::data_param d 682 ) const 683 { 684 return 685 Fun()( 686 proto::child_c< 0>(e) , proto::child_c< 1>(e) , proto::child_c< 2>(e) , proto::child_c< 3>(e) , proto::child_c< 4>(e) , proto::child_c< 5>(e) , proto::child_c< 6>(e) , proto::child_c< 7>(e) , proto::child_c< 8>(e) , proto::child_c< 9>(e) , proto::child_c< 10>(e) , proto::child_c< 11>(e) , proto::child_c< 12>(e) , proto::child_c< 13>(e) , proto::child_c< 14>(e) , proto::child_c< 15>(e) , proto::child_c< 16>(e) , proto::child_c< 17>(e) , proto::child_c< 18>(e) , proto::child_c< 19>(e) 687 , boost::phoenix::context(s, d) 688 ); 689 } 690 }; 691 } 692