annotate DEPENDENCIES/generic/include/boost/proto/transform/detail/preprocessed/make.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 ///////////////////////////////////////////////////////////////////////////////
Chris@16 2 /// \file make.hpp
Chris@16 3 /// Contains definition of the make<> transform.
Chris@16 4 //
Chris@16 5 // Copyright 2008 Eric Niebler. Distributed under the Boost
Chris@16 6 // Software License, Version 1.0. (See accompanying file
Chris@16 7 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8 namespace detail
Chris@16 9 {
Chris@16 10 template<typename R >
Chris@16 11 struct is_applyable<R()>
Chris@16 12 : mpl::true_
Chris@16 13 {};
Chris@16 14 template<typename R >
Chris@16 15 struct is_applyable<R(*)()>
Chris@16 16 : mpl::true_
Chris@16 17 {};
Chris@16 18 template<typename T, typename A>
Chris@16 19 struct construct_<proto::expr<T, A, 0>, true>
Chris@16 20 {
Chris@16 21 typedef proto::expr<T, A, 0> result_type;
Chris@16 22 template<typename A0>
Chris@16 23 BOOST_FORCEINLINE
Chris@16 24 result_type operator ()(A0 &a0) const
Chris@16 25 {
Chris@16 26 return result_type::make(a0);
Chris@16 27 }
Chris@16 28 };
Chris@16 29 template<typename T, typename A>
Chris@16 30 struct construct_<proto::basic_expr<T, A, 0>, true>
Chris@16 31 {
Chris@16 32 typedef proto::basic_expr<T, A, 0> result_type;
Chris@16 33 template<typename A0>
Chris@16 34 BOOST_FORCEINLINE
Chris@16 35 result_type operator ()(A0 &a0) const
Chris@16 36 {
Chris@16 37 return result_type::make(a0);
Chris@16 38 }
Chris@16 39 };
Chris@16 40 template<typename Type >
Chris@16 41 BOOST_FORCEINLINE
Chris@16 42 Type construct()
Chris@16 43 {
Chris@16 44 return construct_<Type>()();
Chris@16 45 }
Chris@16 46 }
Chris@16 47
Chris@16 48
Chris@16 49
Chris@16 50
Chris@16 51 template<typename Object >
Chris@16 52 struct make<Object()>
Chris@16 53 : transform<make<Object()> >
Chris@16 54 {
Chris@16 55 template<typename Expr, typename State, typename Data>
Chris@16 56 struct impl : transform_impl<Expr, State, Data>
Chris@16 57 {
Chris@16 58
Chris@16 59 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 60
Chris@16 61
Chris@16 62
Chris@16 63
Chris@16 64
Chris@16 65
Chris@16 66
Chris@16 67 BOOST_FORCEINLINE
Chris@16 68 result_type operator ()(
Chris@16 69 typename impl::expr_param e
Chris@16 70 , typename impl::state_param s
Chris@16 71 , typename impl::data_param d
Chris@16 72 ) const
Chris@16 73 {
Chris@16 74 proto::detail::ignore_unused(e);
Chris@16 75 proto::detail::ignore_unused(s);
Chris@16 76 proto::detail::ignore_unused(d);
Chris@16 77 return detail::construct<result_type>();
Chris@16 78 }
Chris@16 79 };
Chris@16 80 };
Chris@16 81 namespace detail
Chris@16 82 {
Chris@16 83 template<
Chris@16 84 template<typename> class R
Chris@16 85 , typename A0
Chris@16 86 , typename Expr, typename State, typename Data
Chris@16 87 >
Chris@16 88 struct make_<
Chris@16 89 R<A0>
Chris@16 90 , Expr, State, Data
Chris@16 91 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 92 >
Chris@16 93 : nested_type_if<
Chris@16 94 R<typename make_if_<A0, Expr, State, Data> ::type>
Chris@16 95 , (make_if_<A0, Expr, State, Data> ::applied || false)
Chris@16 96 >
Chris@16 97 {};
Chris@16 98 template<
Chris@16 99 template<typename> class R
Chris@16 100 , typename A0
Chris@16 101 , typename Expr, typename State, typename Data
Chris@16 102 >
Chris@16 103 struct make_<
Chris@16 104 noinvoke<R<A0> >
Chris@16 105 , Expr, State, Data
Chris@16 106 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 107 >
Chris@16 108 {
Chris@16 109 typedef R<typename make_if_<A0, Expr, State, Data> ::type> type;
Chris@16 110 static bool const applied = true;
Chris@16 111 };
Chris@16 112 template<typename R , typename A0>
Chris@16 113 struct is_applyable<R(A0)>
Chris@16 114 : mpl::true_
Chris@16 115 {};
Chris@16 116 template<typename R , typename A0>
Chris@16 117 struct is_applyable<R(*)(A0)>
Chris@16 118 : mpl::true_
Chris@16 119 {};
Chris@16 120 template<typename T, typename A>
Chris@16 121 struct construct_<proto::expr<T, A, 1>, true>
Chris@16 122 {
Chris@16 123 typedef proto::expr<T, A, 1> result_type;
Chris@16 124 template<typename A0>
Chris@16 125 BOOST_FORCEINLINE
Chris@16 126 result_type operator ()(A0 &a0) const
Chris@16 127 {
Chris@16 128 return result_type::make(a0);
Chris@16 129 }
Chris@16 130 };
Chris@16 131 template<typename T, typename A>
Chris@16 132 struct construct_<proto::basic_expr<T, A, 1>, true>
Chris@16 133 {
Chris@16 134 typedef proto::basic_expr<T, A, 1> result_type;
Chris@16 135 template<typename A0>
Chris@16 136 BOOST_FORCEINLINE
Chris@16 137 result_type operator ()(A0 &a0) const
Chris@16 138 {
Chris@16 139 return result_type::make(a0);
Chris@16 140 }
Chris@16 141 };
Chris@16 142 template<typename Type , typename A0>
Chris@16 143 BOOST_FORCEINLINE
Chris@16 144 Type construct(A0 &a0)
Chris@16 145 {
Chris@16 146 return construct_<Type>()(a0);
Chris@16 147 }
Chris@16 148 }
Chris@16 149
Chris@16 150
Chris@16 151
Chris@16 152
Chris@16 153 template<typename Object , typename A0>
Chris@16 154 struct make<Object(A0)>
Chris@16 155 : transform<make<Object(A0)> >
Chris@16 156 {
Chris@16 157 template<typename Expr, typename State, typename Data>
Chris@16 158 struct impl : transform_impl<Expr, State, Data>
Chris@16 159 {
Chris@16 160
Chris@16 161 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 162
Chris@16 163
Chris@16 164
Chris@16 165
Chris@16 166
Chris@16 167
Chris@16 168
Chris@16 169 BOOST_FORCEINLINE
Chris@16 170 result_type operator ()(
Chris@16 171 typename impl::expr_param e
Chris@16 172 , typename impl::state_param s
Chris@16 173 , typename impl::data_param d
Chris@16 174 ) const
Chris@16 175 {
Chris@16 176 proto::detail::ignore_unused(e);
Chris@16 177 proto::detail::ignore_unused(s);
Chris@16 178 proto::detail::ignore_unused(d);
Chris@16 179 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 180 }
Chris@16 181 };
Chris@16 182 };
Chris@16 183
Chris@16 184
Chris@16 185
Chris@16 186
Chris@16 187 template<typename Object , typename A0>
Chris@16 188 struct make<Object(A0...)>
Chris@16 189 : transform<make<Object(A0...)> >
Chris@16 190 {
Chris@16 191 template<typename Expr, typename State, typename Data>
Chris@16 192 struct impl
Chris@16 193 : make<
Chris@16 194 typename detail::expand_pattern<
Chris@16 195 proto::arity_of<Expr>::value
Chris@16 196 , A0
Chris@16 197 , detail::expand_pattern_rest_0<
Chris@16 198 Object
Chris@16 199
Chris@16 200 >
Chris@16 201 >::type
Chris@16 202 >::template impl<Expr, State, Data>
Chris@16 203 {};
Chris@16 204 };
Chris@16 205 namespace detail
Chris@16 206 {
Chris@16 207 template<
Chris@16 208 template<typename , typename> class R
Chris@16 209 , typename A0 , typename A1
Chris@16 210 , typename Expr, typename State, typename Data
Chris@16 211 >
Chris@16 212 struct make_<
Chris@16 213 R<A0 , A1>
Chris@16 214 , Expr, State, Data
Chris@16 215 BOOST_PROTO_TEMPLATE_ARITY_PARAM(2)
Chris@16 216 >
Chris@16 217 : nested_type_if<
Chris@16 218 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type>
Chris@16 219 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || false)
Chris@16 220 >
Chris@16 221 {};
Chris@16 222 template<
Chris@16 223 template<typename , typename> class R
Chris@16 224 , typename A0 , typename A1
Chris@16 225 , typename Expr, typename State, typename Data
Chris@16 226 >
Chris@16 227 struct make_<
Chris@16 228 noinvoke<R<A0 , A1> >
Chris@16 229 , Expr, State, Data
Chris@16 230 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 231 >
Chris@16 232 {
Chris@16 233 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type> type;
Chris@16 234 static bool const applied = true;
Chris@16 235 };
Chris@16 236 template<typename R , typename A0 , typename A1>
Chris@16 237 struct is_applyable<R(A0 , A1)>
Chris@16 238 : mpl::true_
Chris@16 239 {};
Chris@16 240 template<typename R , typename A0 , typename A1>
Chris@16 241 struct is_applyable<R(*)(A0 , A1)>
Chris@16 242 : mpl::true_
Chris@16 243 {};
Chris@16 244 template<typename T, typename A>
Chris@16 245 struct construct_<proto::expr<T, A, 2>, true>
Chris@16 246 {
Chris@16 247 typedef proto::expr<T, A, 2> result_type;
Chris@16 248 template<typename A0 , typename A1>
Chris@16 249 BOOST_FORCEINLINE
Chris@16 250 result_type operator ()(A0 &a0 , A1 &a1) const
Chris@16 251 {
Chris@16 252 return result_type::make(a0 , a1);
Chris@16 253 }
Chris@16 254 };
Chris@16 255 template<typename T, typename A>
Chris@16 256 struct construct_<proto::basic_expr<T, A, 2>, true>
Chris@16 257 {
Chris@16 258 typedef proto::basic_expr<T, A, 2> result_type;
Chris@16 259 template<typename A0 , typename A1>
Chris@16 260 BOOST_FORCEINLINE
Chris@16 261 result_type operator ()(A0 &a0 , A1 &a1) const
Chris@16 262 {
Chris@16 263 return result_type::make(a0 , a1);
Chris@16 264 }
Chris@16 265 };
Chris@16 266 template<typename Type , typename A0 , typename A1>
Chris@16 267 BOOST_FORCEINLINE
Chris@16 268 Type construct(A0 &a0 , A1 &a1)
Chris@16 269 {
Chris@16 270 return construct_<Type>()(a0 , a1);
Chris@16 271 }
Chris@16 272 }
Chris@16 273
Chris@16 274
Chris@16 275
Chris@16 276
Chris@16 277 template<typename Object , typename A0 , typename A1>
Chris@16 278 struct make<Object(A0 , A1)>
Chris@16 279 : transform<make<Object(A0 , A1)> >
Chris@16 280 {
Chris@16 281 template<typename Expr, typename State, typename Data>
Chris@16 282 struct impl : transform_impl<Expr, State, Data>
Chris@16 283 {
Chris@16 284
Chris@16 285 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 286
Chris@16 287
Chris@16 288
Chris@16 289
Chris@16 290
Chris@16 291
Chris@16 292
Chris@16 293 BOOST_FORCEINLINE
Chris@16 294 result_type operator ()(
Chris@16 295 typename impl::expr_param e
Chris@16 296 , typename impl::state_param s
Chris@16 297 , typename impl::data_param d
Chris@16 298 ) const
Chris@16 299 {
Chris@16 300 proto::detail::ignore_unused(e);
Chris@16 301 proto::detail::ignore_unused(s);
Chris@16 302 proto::detail::ignore_unused(d);
Chris@16 303 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 304 }
Chris@16 305 };
Chris@16 306 };
Chris@16 307
Chris@16 308
Chris@16 309
Chris@16 310
Chris@16 311 template<typename Object , typename A0 , typename A1>
Chris@16 312 struct make<Object(A0 , A1...)>
Chris@16 313 : transform<make<Object(A0 , A1...)> >
Chris@16 314 {
Chris@16 315 template<typename Expr, typename State, typename Data>
Chris@16 316 struct impl
Chris@16 317 : make<
Chris@16 318 typename detail::expand_pattern<
Chris@16 319 proto::arity_of<Expr>::value
Chris@16 320 , A1
Chris@16 321 , detail::expand_pattern_rest_1<
Chris@16 322 Object
Chris@16 323 , A0
Chris@16 324 >
Chris@16 325 >::type
Chris@16 326 >::template impl<Expr, State, Data>
Chris@16 327 {};
Chris@16 328 };
Chris@16 329 namespace detail
Chris@16 330 {
Chris@16 331 template<
Chris@16 332 template<typename , typename , typename> class R
Chris@16 333 , typename A0 , typename A1 , typename A2
Chris@16 334 , typename Expr, typename State, typename Data
Chris@16 335 >
Chris@16 336 struct make_<
Chris@16 337 R<A0 , A1 , A2>
Chris@16 338 , Expr, State, Data
Chris@16 339 BOOST_PROTO_TEMPLATE_ARITY_PARAM(3)
Chris@16 340 >
Chris@16 341 : nested_type_if<
Chris@16 342 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type>
Chris@16 343 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || false)
Chris@16 344 >
Chris@16 345 {};
Chris@16 346 template<
Chris@16 347 template<typename , typename , typename> class R
Chris@16 348 , typename A0 , typename A1 , typename A2
Chris@16 349 , typename Expr, typename State, typename Data
Chris@16 350 >
Chris@16 351 struct make_<
Chris@16 352 noinvoke<R<A0 , A1 , A2> >
Chris@16 353 , Expr, State, Data
Chris@16 354 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 355 >
Chris@16 356 {
Chris@16 357 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type> type;
Chris@16 358 static bool const applied = true;
Chris@16 359 };
Chris@16 360 template<typename R , typename A0 , typename A1 , typename A2>
Chris@16 361 struct is_applyable<R(A0 , A1 , A2)>
Chris@16 362 : mpl::true_
Chris@16 363 {};
Chris@16 364 template<typename R , typename A0 , typename A1 , typename A2>
Chris@16 365 struct is_applyable<R(*)(A0 , A1 , A2)>
Chris@16 366 : mpl::true_
Chris@16 367 {};
Chris@16 368 template<typename T, typename A>
Chris@16 369 struct construct_<proto::expr<T, A, 3>, true>
Chris@16 370 {
Chris@16 371 typedef proto::expr<T, A, 3> result_type;
Chris@16 372 template<typename A0 , typename A1 , typename A2>
Chris@16 373 BOOST_FORCEINLINE
Chris@16 374 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2) const
Chris@16 375 {
Chris@16 376 return result_type::make(a0 , a1 , a2);
Chris@16 377 }
Chris@16 378 };
Chris@16 379 template<typename T, typename A>
Chris@16 380 struct construct_<proto::basic_expr<T, A, 3>, true>
Chris@16 381 {
Chris@16 382 typedef proto::basic_expr<T, A, 3> result_type;
Chris@16 383 template<typename A0 , typename A1 , typename A2>
Chris@16 384 BOOST_FORCEINLINE
Chris@16 385 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2) const
Chris@16 386 {
Chris@16 387 return result_type::make(a0 , a1 , a2);
Chris@16 388 }
Chris@16 389 };
Chris@16 390 template<typename Type , typename A0 , typename A1 , typename A2>
Chris@16 391 BOOST_FORCEINLINE
Chris@16 392 Type construct(A0 &a0 , A1 &a1 , A2 &a2)
Chris@16 393 {
Chris@16 394 return construct_<Type>()(a0 , a1 , a2);
Chris@16 395 }
Chris@16 396 }
Chris@16 397
Chris@16 398
Chris@16 399
Chris@16 400
Chris@16 401 template<typename Object , typename A0 , typename A1 , typename A2>
Chris@16 402 struct make<Object(A0 , A1 , A2)>
Chris@16 403 : transform<make<Object(A0 , A1 , A2)> >
Chris@16 404 {
Chris@16 405 template<typename Expr, typename State, typename Data>
Chris@16 406 struct impl : transform_impl<Expr, State, Data>
Chris@16 407 {
Chris@16 408
Chris@16 409 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 410
Chris@16 411
Chris@16 412
Chris@16 413
Chris@16 414
Chris@16 415
Chris@16 416
Chris@16 417 BOOST_FORCEINLINE
Chris@16 418 result_type operator ()(
Chris@16 419 typename impl::expr_param e
Chris@16 420 , typename impl::state_param s
Chris@16 421 , typename impl::data_param d
Chris@16 422 ) const
Chris@16 423 {
Chris@16 424 proto::detail::ignore_unused(e);
Chris@16 425 proto::detail::ignore_unused(s);
Chris@16 426 proto::detail::ignore_unused(d);
Chris@16 427 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 428 }
Chris@16 429 };
Chris@16 430 };
Chris@16 431
Chris@16 432
Chris@16 433
Chris@16 434
Chris@16 435 template<typename Object , typename A0 , typename A1 , typename A2>
Chris@16 436 struct make<Object(A0 , A1 , A2...)>
Chris@16 437 : transform<make<Object(A0 , A1 , A2...)> >
Chris@16 438 {
Chris@16 439 template<typename Expr, typename State, typename Data>
Chris@16 440 struct impl
Chris@16 441 : make<
Chris@16 442 typename detail::expand_pattern<
Chris@16 443 proto::arity_of<Expr>::value
Chris@16 444 , A2
Chris@16 445 , detail::expand_pattern_rest_2<
Chris@16 446 Object
Chris@16 447 , A0 , A1
Chris@16 448 >
Chris@16 449 >::type
Chris@16 450 >::template impl<Expr, State, Data>
Chris@16 451 {};
Chris@16 452 };
Chris@16 453 namespace detail
Chris@16 454 {
Chris@16 455 template<
Chris@16 456 template<typename , typename , typename , typename> class R
Chris@16 457 , typename A0 , typename A1 , typename A2 , typename A3
Chris@16 458 , typename Expr, typename State, typename Data
Chris@16 459 >
Chris@16 460 struct make_<
Chris@16 461 R<A0 , A1 , A2 , A3>
Chris@16 462 , Expr, State, Data
Chris@16 463 BOOST_PROTO_TEMPLATE_ARITY_PARAM(4)
Chris@16 464 >
Chris@16 465 : nested_type_if<
Chris@16 466 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type>
Chris@16 467 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || false)
Chris@16 468 >
Chris@16 469 {};
Chris@16 470 template<
Chris@16 471 template<typename , typename , typename , typename> class R
Chris@16 472 , typename A0 , typename A1 , typename A2 , typename A3
Chris@16 473 , typename Expr, typename State, typename Data
Chris@16 474 >
Chris@16 475 struct make_<
Chris@16 476 noinvoke<R<A0 , A1 , A2 , A3> >
Chris@16 477 , Expr, State, Data
Chris@16 478 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 479 >
Chris@16 480 {
Chris@16 481 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type> type;
Chris@16 482 static bool const applied = true;
Chris@16 483 };
Chris@16 484 template<typename R , typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 485 struct is_applyable<R(A0 , A1 , A2 , A3)>
Chris@16 486 : mpl::true_
Chris@16 487 {};
Chris@16 488 template<typename R , typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 489 struct is_applyable<R(*)(A0 , A1 , A2 , A3)>
Chris@16 490 : mpl::true_
Chris@16 491 {};
Chris@16 492 template<typename T, typename A>
Chris@16 493 struct construct_<proto::expr<T, A, 4>, true>
Chris@16 494 {
Chris@16 495 typedef proto::expr<T, A, 4> result_type;
Chris@16 496 template<typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 497 BOOST_FORCEINLINE
Chris@16 498 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3) const
Chris@16 499 {
Chris@16 500 return result_type::make(a0 , a1 , a2 , a3);
Chris@16 501 }
Chris@16 502 };
Chris@16 503 template<typename T, typename A>
Chris@16 504 struct construct_<proto::basic_expr<T, A, 4>, true>
Chris@16 505 {
Chris@16 506 typedef proto::basic_expr<T, A, 4> result_type;
Chris@16 507 template<typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 508 BOOST_FORCEINLINE
Chris@16 509 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3) const
Chris@16 510 {
Chris@16 511 return result_type::make(a0 , a1 , a2 , a3);
Chris@16 512 }
Chris@16 513 };
Chris@16 514 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 515 BOOST_FORCEINLINE
Chris@16 516 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3)
Chris@16 517 {
Chris@16 518 return construct_<Type>()(a0 , a1 , a2 , a3);
Chris@16 519 }
Chris@16 520 }
Chris@16 521
Chris@16 522
Chris@16 523
Chris@16 524
Chris@16 525 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 526 struct make<Object(A0 , A1 , A2 , A3)>
Chris@16 527 : transform<make<Object(A0 , A1 , A2 , A3)> >
Chris@16 528 {
Chris@16 529 template<typename Expr, typename State, typename Data>
Chris@16 530 struct impl : transform_impl<Expr, State, Data>
Chris@16 531 {
Chris@16 532
Chris@16 533 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 534
Chris@16 535
Chris@16 536
Chris@16 537
Chris@16 538
Chris@16 539
Chris@16 540
Chris@16 541 BOOST_FORCEINLINE
Chris@16 542 result_type operator ()(
Chris@16 543 typename impl::expr_param e
Chris@16 544 , typename impl::state_param s
Chris@16 545 , typename impl::data_param d
Chris@16 546 ) const
Chris@16 547 {
Chris@16 548 proto::detail::ignore_unused(e);
Chris@16 549 proto::detail::ignore_unused(s);
Chris@16 550 proto::detail::ignore_unused(d);
Chris@16 551 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 552 }
Chris@16 553 };
Chris@16 554 };
Chris@16 555
Chris@16 556
Chris@16 557
Chris@16 558
Chris@16 559 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 560 struct make<Object(A0 , A1 , A2 , A3...)>
Chris@16 561 : transform<make<Object(A0 , A1 , A2 , A3...)> >
Chris@16 562 {
Chris@16 563 template<typename Expr, typename State, typename Data>
Chris@16 564 struct impl
Chris@16 565 : make<
Chris@16 566 typename detail::expand_pattern<
Chris@16 567 proto::arity_of<Expr>::value
Chris@16 568 , A3
Chris@16 569 , detail::expand_pattern_rest_3<
Chris@16 570 Object
Chris@16 571 , A0 , A1 , A2
Chris@16 572 >
Chris@16 573 >::type
Chris@16 574 >::template impl<Expr, State, Data>
Chris@16 575 {};
Chris@16 576 };
Chris@16 577 namespace detail
Chris@16 578 {
Chris@16 579 template<
Chris@16 580 template<typename , typename , typename , typename , typename> class R
Chris@16 581 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
Chris@16 582 , typename Expr, typename State, typename Data
Chris@16 583 >
Chris@16 584 struct make_<
Chris@16 585 R<A0 , A1 , A2 , A3 , A4>
Chris@16 586 , Expr, State, Data
Chris@16 587 BOOST_PROTO_TEMPLATE_ARITY_PARAM(5)
Chris@16 588 >
Chris@16 589 : nested_type_if<
Chris@16 590 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type>
Chris@16 591 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || false)
Chris@16 592 >
Chris@16 593 {};
Chris@16 594 template<
Chris@16 595 template<typename , typename , typename , typename , typename> class R
Chris@16 596 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4
Chris@16 597 , typename Expr, typename State, typename Data
Chris@16 598 >
Chris@16 599 struct make_<
Chris@16 600 noinvoke<R<A0 , A1 , A2 , A3 , A4> >
Chris@16 601 , Expr, State, Data
Chris@16 602 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 603 >
Chris@16 604 {
Chris@16 605 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type> type;
Chris@16 606 static bool const applied = true;
Chris@16 607 };
Chris@16 608 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 609 struct is_applyable<R(A0 , A1 , A2 , A3 , A4)>
Chris@16 610 : mpl::true_
Chris@16 611 {};
Chris@16 612 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 613 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4)>
Chris@16 614 : mpl::true_
Chris@16 615 {};
Chris@16 616 template<typename T, typename A>
Chris@16 617 struct construct_<proto::expr<T, A, 5>, true>
Chris@16 618 {
Chris@16 619 typedef proto::expr<T, A, 5> result_type;
Chris@16 620 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 621 BOOST_FORCEINLINE
Chris@16 622 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4) const
Chris@16 623 {
Chris@16 624 return result_type::make(a0 , a1 , a2 , a3 , a4);
Chris@16 625 }
Chris@16 626 };
Chris@16 627 template<typename T, typename A>
Chris@16 628 struct construct_<proto::basic_expr<T, A, 5>, true>
Chris@16 629 {
Chris@16 630 typedef proto::basic_expr<T, A, 5> result_type;
Chris@16 631 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 632 BOOST_FORCEINLINE
Chris@16 633 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4) const
Chris@16 634 {
Chris@16 635 return result_type::make(a0 , a1 , a2 , a3 , a4);
Chris@16 636 }
Chris@16 637 };
Chris@16 638 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 639 BOOST_FORCEINLINE
Chris@16 640 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4)
Chris@16 641 {
Chris@16 642 return construct_<Type>()(a0 , a1 , a2 , a3 , a4);
Chris@16 643 }
Chris@16 644 }
Chris@16 645
Chris@16 646
Chris@16 647
Chris@16 648
Chris@16 649 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 650 struct make<Object(A0 , A1 , A2 , A3 , A4)>
Chris@16 651 : transform<make<Object(A0 , A1 , A2 , A3 , A4)> >
Chris@16 652 {
Chris@16 653 template<typename Expr, typename State, typename Data>
Chris@16 654 struct impl : transform_impl<Expr, State, Data>
Chris@16 655 {
Chris@16 656
Chris@16 657 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 658
Chris@16 659
Chris@16 660
Chris@16 661
Chris@16 662
Chris@16 663
Chris@16 664
Chris@16 665 BOOST_FORCEINLINE
Chris@16 666 result_type operator ()(
Chris@16 667 typename impl::expr_param e
Chris@16 668 , typename impl::state_param s
Chris@16 669 , typename impl::data_param d
Chris@16 670 ) const
Chris@16 671 {
Chris@16 672 proto::detail::ignore_unused(e);
Chris@16 673 proto::detail::ignore_unused(s);
Chris@16 674 proto::detail::ignore_unused(d);
Chris@16 675 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 676 }
Chris@16 677 };
Chris@16 678 };
Chris@16 679
Chris@16 680
Chris@16 681
Chris@16 682
Chris@16 683 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 684 struct make<Object(A0 , A1 , A2 , A3 , A4...)>
Chris@16 685 : transform<make<Object(A0 , A1 , A2 , A3 , A4...)> >
Chris@16 686 {
Chris@16 687 template<typename Expr, typename State, typename Data>
Chris@16 688 struct impl
Chris@16 689 : make<
Chris@16 690 typename detail::expand_pattern<
Chris@16 691 proto::arity_of<Expr>::value
Chris@16 692 , A4
Chris@16 693 , detail::expand_pattern_rest_4<
Chris@16 694 Object
Chris@16 695 , A0 , A1 , A2 , A3
Chris@16 696 >
Chris@16 697 >::type
Chris@16 698 >::template impl<Expr, State, Data>
Chris@16 699 {};
Chris@16 700 };
Chris@16 701 namespace detail
Chris@16 702 {
Chris@16 703 template<
Chris@16 704 template<typename , typename , typename , typename , typename , typename> class R
Chris@16 705 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
Chris@16 706 , typename Expr, typename State, typename Data
Chris@16 707 >
Chris@16 708 struct make_<
Chris@16 709 R<A0 , A1 , A2 , A3 , A4 , A5>
Chris@16 710 , Expr, State, Data
Chris@16 711 BOOST_PROTO_TEMPLATE_ARITY_PARAM(6)
Chris@16 712 >
Chris@16 713 : nested_type_if<
Chris@16 714 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type>
Chris@16 715 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || false)
Chris@16 716 >
Chris@16 717 {};
Chris@16 718 template<
Chris@16 719 template<typename , typename , typename , typename , typename , typename> class R
Chris@16 720 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5
Chris@16 721 , typename Expr, typename State, typename Data
Chris@16 722 >
Chris@16 723 struct make_<
Chris@16 724 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5> >
Chris@16 725 , Expr, State, Data
Chris@16 726 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 727 >
Chris@16 728 {
Chris@16 729 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type> type;
Chris@16 730 static bool const applied = true;
Chris@16 731 };
Chris@16 732 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 733 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5)>
Chris@16 734 : mpl::true_
Chris@16 735 {};
Chris@16 736 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 737 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5)>
Chris@16 738 : mpl::true_
Chris@16 739 {};
Chris@16 740 template<typename T, typename A>
Chris@16 741 struct construct_<proto::expr<T, A, 6>, true>
Chris@16 742 {
Chris@16 743 typedef proto::expr<T, A, 6> result_type;
Chris@16 744 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 745 BOOST_FORCEINLINE
Chris@16 746 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5) const
Chris@16 747 {
Chris@16 748 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5);
Chris@16 749 }
Chris@16 750 };
Chris@16 751 template<typename T, typename A>
Chris@16 752 struct construct_<proto::basic_expr<T, A, 6>, true>
Chris@16 753 {
Chris@16 754 typedef proto::basic_expr<T, A, 6> result_type;
Chris@16 755 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 756 BOOST_FORCEINLINE
Chris@16 757 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5) const
Chris@16 758 {
Chris@16 759 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5);
Chris@16 760 }
Chris@16 761 };
Chris@16 762 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 763 BOOST_FORCEINLINE
Chris@16 764 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5)
Chris@16 765 {
Chris@16 766 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5);
Chris@16 767 }
Chris@16 768 }
Chris@16 769
Chris@16 770
Chris@16 771
Chris@16 772
Chris@16 773 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 774 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5)>
Chris@16 775 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5)> >
Chris@16 776 {
Chris@16 777 template<typename Expr, typename State, typename Data>
Chris@16 778 struct impl : transform_impl<Expr, State, Data>
Chris@16 779 {
Chris@16 780
Chris@16 781 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 782
Chris@16 783
Chris@16 784
Chris@16 785
Chris@16 786
Chris@16 787
Chris@16 788
Chris@16 789 BOOST_FORCEINLINE
Chris@16 790 result_type operator ()(
Chris@16 791 typename impl::expr_param e
Chris@16 792 , typename impl::state_param s
Chris@16 793 , typename impl::data_param d
Chris@16 794 ) const
Chris@16 795 {
Chris@16 796 proto::detail::ignore_unused(e);
Chris@16 797 proto::detail::ignore_unused(s);
Chris@16 798 proto::detail::ignore_unused(d);
Chris@16 799 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 800 }
Chris@16 801 };
Chris@16 802 };
Chris@16 803
Chris@16 804
Chris@16 805
Chris@16 806
Chris@16 807 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 808 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5...)>
Chris@16 809 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5...)> >
Chris@16 810 {
Chris@16 811 template<typename Expr, typename State, typename Data>
Chris@16 812 struct impl
Chris@16 813 : make<
Chris@16 814 typename detail::expand_pattern<
Chris@16 815 proto::arity_of<Expr>::value
Chris@16 816 , A5
Chris@16 817 , detail::expand_pattern_rest_5<
Chris@16 818 Object
Chris@16 819 , A0 , A1 , A2 , A3 , A4
Chris@16 820 >
Chris@16 821 >::type
Chris@16 822 >::template impl<Expr, State, Data>
Chris@16 823 {};
Chris@16 824 };
Chris@16 825 namespace detail
Chris@16 826 {
Chris@16 827 template<
Chris@16 828 template<typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 829 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
Chris@16 830 , typename Expr, typename State, typename Data
Chris@16 831 >
Chris@16 832 struct make_<
Chris@16 833 R<A0 , A1 , A2 , A3 , A4 , A5 , A6>
Chris@16 834 , Expr, State, Data
Chris@16 835 BOOST_PROTO_TEMPLATE_ARITY_PARAM(7)
Chris@16 836 >
Chris@16 837 : nested_type_if<
Chris@16 838 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type>
Chris@16 839 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || false)
Chris@16 840 >
Chris@16 841 {};
Chris@16 842 template<
Chris@16 843 template<typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 844 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6
Chris@16 845 , typename Expr, typename State, typename Data
Chris@16 846 >
Chris@16 847 struct make_<
Chris@16 848 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6> >
Chris@16 849 , Expr, State, Data
Chris@16 850 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 851 >
Chris@16 852 {
Chris@16 853 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type> type;
Chris@16 854 static bool const applied = true;
Chris@16 855 };
Chris@16 856 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 857 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
Chris@16 858 : mpl::true_
Chris@16 859 {};
Chris@16 860 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 861 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
Chris@16 862 : mpl::true_
Chris@16 863 {};
Chris@16 864 template<typename T, typename A>
Chris@16 865 struct construct_<proto::expr<T, A, 7>, true>
Chris@16 866 {
Chris@16 867 typedef proto::expr<T, A, 7> result_type;
Chris@16 868 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 869 BOOST_FORCEINLINE
Chris@16 870 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6) const
Chris@16 871 {
Chris@16 872 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6);
Chris@16 873 }
Chris@16 874 };
Chris@16 875 template<typename T, typename A>
Chris@16 876 struct construct_<proto::basic_expr<T, A, 7>, true>
Chris@16 877 {
Chris@16 878 typedef proto::basic_expr<T, A, 7> result_type;
Chris@16 879 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 880 BOOST_FORCEINLINE
Chris@16 881 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6) const
Chris@16 882 {
Chris@16 883 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6);
Chris@16 884 }
Chris@16 885 };
Chris@16 886 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 887 BOOST_FORCEINLINE
Chris@16 888 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6)
Chris@16 889 {
Chris@16 890 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6);
Chris@16 891 }
Chris@16 892 }
Chris@16 893
Chris@16 894
Chris@16 895
Chris@16 896
Chris@16 897 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 898 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)>
Chris@16 899 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6)> >
Chris@16 900 {
Chris@16 901 template<typename Expr, typename State, typename Data>
Chris@16 902 struct impl : transform_impl<Expr, State, Data>
Chris@16 903 {
Chris@16 904
Chris@16 905 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 906
Chris@16 907
Chris@16 908
Chris@16 909
Chris@16 910
Chris@16 911
Chris@16 912
Chris@16 913 BOOST_FORCEINLINE
Chris@16 914 result_type operator ()(
Chris@16 915 typename impl::expr_param e
Chris@16 916 , typename impl::state_param s
Chris@16 917 , typename impl::data_param d
Chris@16 918 ) const
Chris@16 919 {
Chris@16 920 proto::detail::ignore_unused(e);
Chris@16 921 proto::detail::ignore_unused(s);
Chris@16 922 proto::detail::ignore_unused(d);
Chris@16 923 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 924 }
Chris@16 925 };
Chris@16 926 };
Chris@16 927
Chris@16 928
Chris@16 929
Chris@16 930
Chris@16 931 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 932 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)>
Chris@16 933 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6...)> >
Chris@16 934 {
Chris@16 935 template<typename Expr, typename State, typename Data>
Chris@16 936 struct impl
Chris@16 937 : make<
Chris@16 938 typename detail::expand_pattern<
Chris@16 939 proto::arity_of<Expr>::value
Chris@16 940 , A6
Chris@16 941 , detail::expand_pattern_rest_6<
Chris@16 942 Object
Chris@16 943 , A0 , A1 , A2 , A3 , A4 , A5
Chris@16 944 >
Chris@16 945 >::type
Chris@16 946 >::template impl<Expr, State, Data>
Chris@16 947 {};
Chris@16 948 };
Chris@16 949 namespace detail
Chris@16 950 {
Chris@16 951 template<
Chris@16 952 template<typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 953 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
Chris@16 954 , typename Expr, typename State, typename Data
Chris@16 955 >
Chris@16 956 struct make_<
Chris@16 957 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7>
Chris@16 958 , Expr, State, Data
Chris@16 959 BOOST_PROTO_TEMPLATE_ARITY_PARAM(8)
Chris@16 960 >
Chris@16 961 : nested_type_if<
Chris@16 962 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type>
Chris@16 963 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || false)
Chris@16 964 >
Chris@16 965 {};
Chris@16 966 template<
Chris@16 967 template<typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 968 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7
Chris@16 969 , typename Expr, typename State, typename Data
Chris@16 970 >
Chris@16 971 struct make_<
Chris@16 972 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7> >
Chris@16 973 , Expr, State, Data
Chris@16 974 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 975 >
Chris@16 976 {
Chris@16 977 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type> type;
Chris@16 978 static bool const applied = true;
Chris@16 979 };
Chris@16 980 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 981 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
Chris@16 982 : mpl::true_
Chris@16 983 {};
Chris@16 984 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 985 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
Chris@16 986 : mpl::true_
Chris@16 987 {};
Chris@16 988 template<typename T, typename A>
Chris@16 989 struct construct_<proto::expr<T, A, 8>, true>
Chris@16 990 {
Chris@16 991 typedef proto::expr<T, A, 8> result_type;
Chris@16 992 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 993 BOOST_FORCEINLINE
Chris@16 994 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7) const
Chris@16 995 {
Chris@16 996 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
Chris@16 997 }
Chris@16 998 };
Chris@16 999 template<typename T, typename A>
Chris@16 1000 struct construct_<proto::basic_expr<T, A, 8>, true>
Chris@16 1001 {
Chris@16 1002 typedef proto::basic_expr<T, A, 8> result_type;
Chris@16 1003 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 1004 BOOST_FORCEINLINE
Chris@16 1005 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7) const
Chris@16 1006 {
Chris@16 1007 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
Chris@16 1008 }
Chris@16 1009 };
Chris@16 1010 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 1011 BOOST_FORCEINLINE
Chris@16 1012 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7)
Chris@16 1013 {
Chris@16 1014 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7);
Chris@16 1015 }
Chris@16 1016 }
Chris@16 1017
Chris@16 1018
Chris@16 1019
Chris@16 1020
Chris@16 1021 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 1022 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)>
Chris@16 1023 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7)> >
Chris@16 1024 {
Chris@16 1025 template<typename Expr, typename State, typename Data>
Chris@16 1026 struct impl : transform_impl<Expr, State, Data>
Chris@16 1027 {
Chris@16 1028
Chris@16 1029 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 1030
Chris@16 1031
Chris@16 1032
Chris@16 1033
Chris@16 1034
Chris@16 1035
Chris@16 1036
Chris@16 1037 BOOST_FORCEINLINE
Chris@16 1038 result_type operator ()(
Chris@16 1039 typename impl::expr_param e
Chris@16 1040 , typename impl::state_param s
Chris@16 1041 , typename impl::data_param d
Chris@16 1042 ) const
Chris@16 1043 {
Chris@16 1044 proto::detail::ignore_unused(e);
Chris@16 1045 proto::detail::ignore_unused(s);
Chris@16 1046 proto::detail::ignore_unused(d);
Chris@16 1047 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 1048 }
Chris@16 1049 };
Chris@16 1050 };
Chris@16 1051
Chris@16 1052
Chris@16 1053
Chris@16 1054
Chris@16 1055 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 1056 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)>
Chris@16 1057 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7...)> >
Chris@16 1058 {
Chris@16 1059 template<typename Expr, typename State, typename Data>
Chris@16 1060 struct impl
Chris@16 1061 : make<
Chris@16 1062 typename detail::expand_pattern<
Chris@16 1063 proto::arity_of<Expr>::value
Chris@16 1064 , A7
Chris@16 1065 , detail::expand_pattern_rest_7<
Chris@16 1066 Object
Chris@16 1067 , A0 , A1 , A2 , A3 , A4 , A5 , A6
Chris@16 1068 >
Chris@16 1069 >::type
Chris@16 1070 >::template impl<Expr, State, Data>
Chris@16 1071 {};
Chris@16 1072 };
Chris@16 1073 namespace detail
Chris@16 1074 {
Chris@16 1075 template<
Chris@16 1076 template<typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 1077 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
Chris@16 1078 , typename Expr, typename State, typename Data
Chris@16 1079 >
Chris@16 1080 struct make_<
Chris@16 1081 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8>
Chris@16 1082 , Expr, State, Data
Chris@16 1083 BOOST_PROTO_TEMPLATE_ARITY_PARAM(9)
Chris@16 1084 >
Chris@16 1085 : nested_type_if<
Chris@16 1086 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type>
Chris@16 1087 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || make_if_<A8, Expr, State, Data> ::applied || false)
Chris@16 1088 >
Chris@16 1089 {};
Chris@16 1090 template<
Chris@16 1091 template<typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 1092 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8
Chris@16 1093 , typename Expr, typename State, typename Data
Chris@16 1094 >
Chris@16 1095 struct make_<
Chris@16 1096 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8> >
Chris@16 1097 , Expr, State, Data
Chris@16 1098 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 1099 >
Chris@16 1100 {
Chris@16 1101 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type> type;
Chris@16 1102 static bool const applied = true;
Chris@16 1103 };
Chris@16 1104 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1105 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
Chris@16 1106 : mpl::true_
Chris@16 1107 {};
Chris@16 1108 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1109 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
Chris@16 1110 : mpl::true_
Chris@16 1111 {};
Chris@16 1112 template<typename T, typename A>
Chris@16 1113 struct construct_<proto::expr<T, A, 9>, true>
Chris@16 1114 {
Chris@16 1115 typedef proto::expr<T, A, 9> result_type;
Chris@16 1116 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1117 BOOST_FORCEINLINE
Chris@16 1118 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8) const
Chris@16 1119 {
Chris@16 1120 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
Chris@16 1121 }
Chris@16 1122 };
Chris@16 1123 template<typename T, typename A>
Chris@16 1124 struct construct_<proto::basic_expr<T, A, 9>, true>
Chris@16 1125 {
Chris@16 1126 typedef proto::basic_expr<T, A, 9> result_type;
Chris@16 1127 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1128 BOOST_FORCEINLINE
Chris@16 1129 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8) const
Chris@16 1130 {
Chris@16 1131 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
Chris@16 1132 }
Chris@16 1133 };
Chris@16 1134 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1135 BOOST_FORCEINLINE
Chris@16 1136 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8)
Chris@16 1137 {
Chris@16 1138 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8);
Chris@16 1139 }
Chris@16 1140 }
Chris@16 1141
Chris@16 1142
Chris@16 1143
Chris@16 1144
Chris@16 1145 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1146 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)>
Chris@16 1147 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8)> >
Chris@16 1148 {
Chris@16 1149 template<typename Expr, typename State, typename Data>
Chris@16 1150 struct impl : transform_impl<Expr, State, Data>
Chris@16 1151 {
Chris@16 1152
Chris@16 1153 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 1154
Chris@16 1155
Chris@16 1156
Chris@16 1157
Chris@16 1158
Chris@16 1159
Chris@16 1160
Chris@16 1161 BOOST_FORCEINLINE
Chris@16 1162 result_type operator ()(
Chris@16 1163 typename impl::expr_param e
Chris@16 1164 , typename impl::state_param s
Chris@16 1165 , typename impl::data_param d
Chris@16 1166 ) const
Chris@16 1167 {
Chris@16 1168 proto::detail::ignore_unused(e);
Chris@16 1169 proto::detail::ignore_unused(s);
Chris@16 1170 proto::detail::ignore_unused(d);
Chris@16 1171 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 1172 }
Chris@16 1173 };
Chris@16 1174 };
Chris@16 1175
Chris@16 1176
Chris@16 1177
Chris@16 1178
Chris@16 1179 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1180 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)>
Chris@16 1181 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8...)> >
Chris@16 1182 {
Chris@16 1183 template<typename Expr, typename State, typename Data>
Chris@16 1184 struct impl
Chris@16 1185 : make<
Chris@16 1186 typename detail::expand_pattern<
Chris@16 1187 proto::arity_of<Expr>::value
Chris@16 1188 , A8
Chris@16 1189 , detail::expand_pattern_rest_8<
Chris@16 1190 Object
Chris@16 1191 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7
Chris@16 1192 >
Chris@16 1193 >::type
Chris@16 1194 >::template impl<Expr, State, Data>
Chris@16 1195 {};
Chris@16 1196 };
Chris@16 1197 namespace detail
Chris@16 1198 {
Chris@16 1199 template<
Chris@16 1200 template<typename , typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 1201 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
Chris@16 1202 , typename Expr, typename State, typename Data
Chris@16 1203 >
Chris@16 1204 struct make_<
Chris@16 1205 R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9>
Chris@16 1206 , Expr, State, Data
Chris@16 1207 BOOST_PROTO_TEMPLATE_ARITY_PARAM(10)
Chris@16 1208 >
Chris@16 1209 : nested_type_if<
Chris@16 1210 R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type , typename make_if_<A9, Expr, State, Data> ::type>
Chris@16 1211 , (make_if_<A0, Expr, State, Data> ::applied || make_if_<A1, Expr, State, Data> ::applied || make_if_<A2, Expr, State, Data> ::applied || make_if_<A3, Expr, State, Data> ::applied || make_if_<A4, Expr, State, Data> ::applied || make_if_<A5, Expr, State, Data> ::applied || make_if_<A6, Expr, State, Data> ::applied || make_if_<A7, Expr, State, Data> ::applied || make_if_<A8, Expr, State, Data> ::applied || make_if_<A9, Expr, State, Data> ::applied || false)
Chris@16 1212 >
Chris@16 1213 {};
Chris@16 1214 template<
Chris@16 1215 template<typename , typename , typename , typename , typename , typename , typename , typename , typename , typename> class R
Chris@16 1216 , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9
Chris@16 1217 , typename Expr, typename State, typename Data
Chris@16 1218 >
Chris@16 1219 struct make_<
Chris@16 1220 noinvoke<R<A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9> >
Chris@16 1221 , Expr, State, Data
Chris@16 1222 BOOST_PROTO_TEMPLATE_ARITY_PARAM(1)
Chris@16 1223 >
Chris@16 1224 {
Chris@16 1225 typedef R<typename make_if_<A0, Expr, State, Data> ::type , typename make_if_<A1, Expr, State, Data> ::type , typename make_if_<A2, Expr, State, Data> ::type , typename make_if_<A3, Expr, State, Data> ::type , typename make_if_<A4, Expr, State, Data> ::type , typename make_if_<A5, Expr, State, Data> ::type , typename make_if_<A6, Expr, State, Data> ::type , typename make_if_<A7, Expr, State, Data> ::type , typename make_if_<A8, Expr, State, Data> ::type , typename make_if_<A9, Expr, State, Data> ::type> type;
Chris@16 1226 static bool const applied = true;
Chris@16 1227 };
Chris@16 1228 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1229 struct is_applyable<R(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
Chris@16 1230 : mpl::true_
Chris@16 1231 {};
Chris@16 1232 template<typename R , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1233 struct is_applyable<R(*)(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
Chris@16 1234 : mpl::true_
Chris@16 1235 {};
Chris@16 1236 template<typename T, typename A>
Chris@16 1237 struct construct_<proto::expr<T, A, 10>, true>
Chris@16 1238 {
Chris@16 1239 typedef proto::expr<T, A, 10> result_type;
Chris@16 1240 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1241 BOOST_FORCEINLINE
Chris@16 1242 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9) const
Chris@16 1243 {
Chris@16 1244 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
Chris@16 1245 }
Chris@16 1246 };
Chris@16 1247 template<typename T, typename A>
Chris@16 1248 struct construct_<proto::basic_expr<T, A, 10>, true>
Chris@16 1249 {
Chris@16 1250 typedef proto::basic_expr<T, A, 10> result_type;
Chris@16 1251 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1252 BOOST_FORCEINLINE
Chris@16 1253 result_type operator ()(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9) const
Chris@16 1254 {
Chris@16 1255 return result_type::make(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
Chris@16 1256 }
Chris@16 1257 };
Chris@16 1258 template<typename Type , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1259 BOOST_FORCEINLINE
Chris@16 1260 Type construct(A0 &a0 , A1 &a1 , A2 &a2 , A3 &a3 , A4 &a4 , A5 &a5 , A6 &a6 , A7 &a7 , A8 &a8 , A9 &a9)
Chris@16 1261 {
Chris@16 1262 return construct_<Type>()(a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9);
Chris@16 1263 }
Chris@16 1264 }
Chris@16 1265
Chris@16 1266
Chris@16 1267
Chris@16 1268
Chris@16 1269 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1270 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)>
Chris@16 1271 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9)> >
Chris@16 1272 {
Chris@16 1273 template<typename Expr, typename State, typename Data>
Chris@16 1274 struct impl : transform_impl<Expr, State, Data>
Chris@16 1275 {
Chris@16 1276
Chris@16 1277 typedef typename detail::make_if_<Object, Expr, State, Data>::type result_type;
Chris@16 1278
Chris@16 1279
Chris@16 1280
Chris@16 1281
Chris@16 1282
Chris@16 1283
Chris@16 1284
Chris@16 1285 BOOST_FORCEINLINE
Chris@16 1286 result_type operator ()(
Chris@16 1287 typename impl::expr_param e
Chris@16 1288 , typename impl::state_param s
Chris@16 1289 , typename impl::data_param d
Chris@16 1290 ) const
Chris@16 1291 {
Chris@16 1292 proto::detail::ignore_unused(e);
Chris@16 1293 proto::detail::ignore_unused(s);
Chris@16 1294 proto::detail::ignore_unused(d);
Chris@16 1295 return detail::construct<result_type>(detail::as_lvalue( typename when<_, A0>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A1>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A2>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A3>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A4>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A5>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A6>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A7>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A8>::template impl<Expr, State, Data>()(e, s, d) ) , detail::as_lvalue( typename when<_, A9>::template impl<Expr, State, Data>()(e, s, d) ));
Chris@16 1296 }
Chris@16 1297 };
Chris@16 1298 };
Chris@16 1299
Chris@16 1300
Chris@16 1301
Chris@16 1302
Chris@16 1303 template<typename Object , typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 1304 struct make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)>
Chris@16 1305 : transform<make<Object(A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8 , A9...)> >
Chris@16 1306 {
Chris@16 1307 template<typename Expr, typename State, typename Data>
Chris@16 1308 struct impl
Chris@16 1309 : make<
Chris@16 1310 typename detail::expand_pattern<
Chris@16 1311 proto::arity_of<Expr>::value
Chris@16 1312 , A9
Chris@16 1313 , detail::expand_pattern_rest_9<
Chris@16 1314 Object
Chris@16 1315 , A0 , A1 , A2 , A3 , A4 , A5 , A6 , A7 , A8
Chris@16 1316 >
Chris@16 1317 >::type
Chris@16 1318 >::template impl<Expr, State, Data>
Chris@16 1319 {};
Chris@16 1320 };