annotate DEPENDENCIES/generic/include/boost/proto/detail/preprocessed/expr_variadic.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 ///////////////////////////////////////////////////////////////////////////////
Chris@16 2 /// \file expr_variadic.hpp
Chris@16 3 /// Contains definition of expr\<\> class template.
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
Chris@16 9
Chris@16 10
Chris@16 11
Chris@16 12
Chris@16 13
Chris@16 14
Chris@16 15
Chris@16 16
Chris@16 17
Chris@16 18
Chris@16 19
Chris@16 20
Chris@16 21
Chris@16 22
Chris@16 23
Chris@16 24
Chris@16 25
Chris@16 26
Chris@16 27
Chris@16 28
Chris@16 29
Chris@16 30
Chris@16 31
Chris@16 32
Chris@16 33
Chris@16 34
Chris@16 35
Chris@16 36 template<typename Tag, typename Arg0>
Chris@16 37 struct expr<Tag, term<Arg0>, 0>
Chris@16 38 {
Chris@16 39 typedef Tag proto_tag;
Chris@16 40 static const long proto_arity_c = 0;
Chris@16 41 typedef mpl::long_<0 > proto_arity;
Chris@16 42 typedef expr proto_base_expr;
Chris@16 43 typedef term<Arg0> proto_args;
Chris@16 44 typedef basic_expr<Tag, proto_args, 0 > proto_grammar;
Chris@16 45 typedef default_domain proto_domain;
Chris@16 46 typedef default_generator proto_generator;
Chris@16 47 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 48 typedef expr proto_derived_expr;
Chris@16 49 typedef void proto_is_expr_;
Chris@16 50 typedef Arg0 proto_child0; proto_child0 child0;
Chris@16 51 typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 52
Chris@16 53
Chris@16 54 BOOST_FORCEINLINE
Chris@16 55 expr const &proto_base() const
Chris@16 56 {
Chris@16 57 return *this;
Chris@16 58 }
Chris@16 59
Chris@16 60
Chris@16 61 BOOST_FORCEINLINE
Chris@16 62 expr &proto_base()
Chris@16 63 {
Chris@16 64 return *this;
Chris@16 65 }
Chris@16 66
Chris@16 67
Chris@16 68
Chris@16 69 template<typename A0>
Chris@16 70 BOOST_FORCEINLINE
Chris@16 71 static expr const make(A0 &a0)
Chris@16 72 {
Chris@16 73 return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
Chris@16 74 }
Chris@16 75
Chris@16 76
Chris@16 77 template<typename A0>
Chris@16 78 BOOST_FORCEINLINE
Chris@16 79 static expr const make(A0 const &a0)
Chris@16 80 {
Chris@16 81 return detail::make_terminal(a0, static_cast<expr *>(0), static_cast<proto_args *>(0));
Chris@16 82 }
Chris@16 83
Chris@16 84
Chris@16 85 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 86
Chris@16 87
Chris@16 88
Chris@16 89
Chris@16 90 BOOST_FORCEINLINE
Chris@16 91 proto::expr<
Chris@16 92 proto::tag::assign
Chris@16 93 , list2<expr &, expr const &>
Chris@16 94 , 2
Chris@16 95 > const
Chris@16 96 operator =(expr const &a)
Chris@16 97 {
Chris@16 98 proto::expr<
Chris@16 99 proto::tag::assign
Chris@16 100 , list2<expr &, expr const &>
Chris@16 101 , 2
Chris@16 102 > that = {*this, a};
Chris@16 103 return that;
Chris@16 104 }
Chris@16 105
Chris@16 106
Chris@16 107
Chris@16 108
Chris@16 109 template<typename A>
Chris@16 110 BOOST_FORCEINLINE
Chris@16 111 proto::expr<
Chris@16 112 proto::tag::assign
Chris@16 113 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 114 , 2
Chris@16 115 > const
Chris@16 116 operator =(A &a) const
Chris@16 117 {
Chris@16 118 proto::expr<
Chris@16 119 proto::tag::assign
Chris@16 120 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 121 , 2
Chris@16 122 > that = {*this, proto::as_child(a)};
Chris@16 123 return that;
Chris@16 124 }
Chris@16 125
Chris@16 126
Chris@16 127 template<typename A>
Chris@16 128 BOOST_FORCEINLINE
Chris@16 129 proto::expr<
Chris@16 130 proto::tag::assign
Chris@16 131 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 132 , 2
Chris@16 133 > const
Chris@16 134 operator =(A const &a) const
Chris@16 135 {
Chris@16 136 proto::expr<
Chris@16 137 proto::tag::assign
Chris@16 138 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 139 , 2
Chris@16 140 > that = {*this, proto::as_child(a)};
Chris@16 141 return that;
Chris@16 142 }
Chris@16 143
Chris@16 144
Chris@16 145 template<typename A>
Chris@16 146 BOOST_FORCEINLINE
Chris@16 147 proto::expr<
Chris@16 148 proto::tag::assign
Chris@16 149 , list2<expr &, typename result_of::as_child<A>::type>
Chris@16 150 , 2
Chris@16 151 > const
Chris@16 152 operator =(A &a)
Chris@16 153 {
Chris@16 154 proto::expr<
Chris@16 155 proto::tag::assign
Chris@16 156 , list2<expr &, typename result_of::as_child<A>::type>
Chris@16 157 , 2
Chris@16 158 > that = {*this, proto::as_child(a)};
Chris@16 159 return that;
Chris@16 160 }
Chris@16 161
Chris@16 162
Chris@16 163 template<typename A>
Chris@16 164 BOOST_FORCEINLINE
Chris@16 165 proto::expr<
Chris@16 166 proto::tag::assign
Chris@16 167 , list2<expr &, typename result_of::as_child<A const>::type>
Chris@16 168 , 2
Chris@16 169 > const
Chris@16 170 operator =(A const &a)
Chris@16 171 {
Chris@16 172 proto::expr<
Chris@16 173 proto::tag::assign
Chris@16 174 , list2<expr &, typename result_of::as_child<A const>::type>
Chris@16 175 , 2
Chris@16 176 > that = {*this, proto::as_child(a)};
Chris@16 177 return that;
Chris@16 178 }
Chris@16 179
Chris@16 180
Chris@16 181
Chris@16 182
Chris@16 183 template<typename A>
Chris@16 184 BOOST_FORCEINLINE
Chris@16 185 proto::expr<
Chris@16 186 proto::tag::subscript
Chris@16 187 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 188 , 2
Chris@16 189 > const
Chris@16 190 operator [](A &a) const
Chris@16 191 {
Chris@16 192 proto::expr<
Chris@16 193 proto::tag::subscript
Chris@16 194 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 195 , 2
Chris@16 196 > that = {*this, proto::as_child(a)};
Chris@16 197 return that;
Chris@16 198 }
Chris@16 199
Chris@16 200
Chris@16 201 template<typename A>
Chris@16 202 BOOST_FORCEINLINE
Chris@16 203 proto::expr<
Chris@16 204 proto::tag::subscript
Chris@16 205 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 206 , 2
Chris@16 207 > const
Chris@16 208 operator [](A const &a) const
Chris@16 209 {
Chris@16 210 proto::expr<
Chris@16 211 proto::tag::subscript
Chris@16 212 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 213 , 2
Chris@16 214 > that = {*this, proto::as_child(a)};
Chris@16 215 return that;
Chris@16 216 }
Chris@16 217
Chris@16 218
Chris@16 219 template<typename A>
Chris@16 220 BOOST_FORCEINLINE
Chris@16 221 proto::expr<
Chris@16 222 proto::tag::subscript
Chris@16 223 , list2<expr &, typename result_of::as_child<A>::type>
Chris@16 224 , 2
Chris@16 225 > const
Chris@16 226 operator [](A &a)
Chris@16 227 {
Chris@16 228 proto::expr<
Chris@16 229 proto::tag::subscript
Chris@16 230 , list2<expr &, typename result_of::as_child<A>::type>
Chris@16 231 , 2
Chris@16 232 > that = {*this, proto::as_child(a)};
Chris@16 233 return that;
Chris@16 234 }
Chris@16 235
Chris@16 236
Chris@16 237 template<typename A>
Chris@16 238 BOOST_FORCEINLINE
Chris@16 239 proto::expr<
Chris@16 240 proto::tag::subscript
Chris@16 241 , list2<expr &, typename result_of::as_child<A const>::type>
Chris@16 242 , 2
Chris@16 243 > const
Chris@16 244 operator [](A const &a)
Chris@16 245 {
Chris@16 246 proto::expr<
Chris@16 247 proto::tag::subscript
Chris@16 248 , list2<expr &, typename result_of::as_child<A const>::type>
Chris@16 249 , 2
Chris@16 250 > that = {*this, proto::as_child(a)};
Chris@16 251 return that;
Chris@16 252 }
Chris@16 253
Chris@16 254
Chris@16 255 template<typename Sig>
Chris@16 256 struct result
Chris@16 257 {
Chris@16 258 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 259 };
Chris@16 260
Chris@16 261
Chris@16 262 template<typename ...A>
Chris@16 263 BOOST_FORCEINLINE
Chris@16 264 typename result_of::funop<
Chris@16 265 expr const(A const &...)
Chris@16 266 , expr
Chris@16 267 , default_domain
Chris@16 268 >::type const
Chris@16 269 operator ()(A const &... a) const
Chris@16 270 {
Chris@16 271 return result_of::funop<
Chris@16 272 expr const(A const &...)
Chris@16 273 , expr
Chris@16 274 , default_domain
Chris@16 275 >::call(*this, a...);
Chris@16 276 }
Chris@16 277
Chris@16 278
Chris@16 279 template<typename ...A>
Chris@16 280 BOOST_FORCEINLINE
Chris@16 281 typename result_of::funop<
Chris@16 282 expr(A const &...)
Chris@16 283 , expr
Chris@16 284 , default_domain
Chris@16 285 >::type const
Chris@16 286 operator ()(A const &... a)
Chris@16 287 {
Chris@16 288 return result_of::funop<
Chris@16 289 expr(A const &...)
Chris@16 290 , expr
Chris@16 291 , default_domain
Chris@16 292 >::call(*this, a...);
Chris@16 293 }
Chris@16 294 };
Chris@16 295
Chris@16 296
Chris@16 297
Chris@16 298
Chris@16 299
Chris@16 300
Chris@16 301
Chris@16 302
Chris@16 303
Chris@16 304
Chris@16 305
Chris@16 306
Chris@16 307
Chris@16 308
Chris@16 309
Chris@16 310
Chris@16 311
Chris@16 312
Chris@16 313
Chris@16 314
Chris@16 315
Chris@16 316
Chris@16 317
Chris@16 318
Chris@16 319
Chris@16 320
Chris@16 321
Chris@16 322 template<typename Tag , typename Arg0>
Chris@16 323 struct expr<Tag, list1<Arg0>, 1 >
Chris@16 324 {
Chris@16 325 typedef Tag proto_tag;
Chris@16 326 static const long proto_arity_c = 1;
Chris@16 327 typedef mpl::long_<1 > proto_arity;
Chris@16 328 typedef expr proto_base_expr;
Chris@16 329 typedef list1<Arg0> proto_args;
Chris@16 330 typedef basic_expr<Tag, proto_args, 1 > proto_grammar;
Chris@16 331 typedef default_domain proto_domain;
Chris@16 332 typedef default_generator proto_generator;
Chris@16 333 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 334 typedef expr proto_derived_expr;
Chris@16 335 typedef void proto_is_expr_;
Chris@16 336 typedef Arg0 proto_child0; proto_child0 child0;
Chris@16 337 typedef void proto_child1; typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 338
Chris@16 339
Chris@16 340 BOOST_FORCEINLINE
Chris@16 341 expr const &proto_base() const
Chris@16 342 {
Chris@16 343 return *this;
Chris@16 344 }
Chris@16 345
Chris@16 346
Chris@16 347 BOOST_FORCEINLINE
Chris@16 348 expr &proto_base()
Chris@16 349 {
Chris@16 350 return *this;
Chris@16 351 }
Chris@16 352
Chris@16 353
Chris@16 354
Chris@16 355 template<typename A0>
Chris@16 356 BOOST_FORCEINLINE
Chris@16 357 static expr const make(A0 const &a0)
Chris@16 358 {
Chris@16 359 expr that = {a0};
Chris@16 360 return that;
Chris@16 361 }
Chris@16 362
Chris@16 363
Chris@16 364
Chris@16 365 typedef typename detail::address_of_hack<Tag, proto_child0>::type address_of_hack_type_;
Chris@16 366
Chris@16 367
Chris@16 368
Chris@16 369
Chris@16 370
Chris@16 371
Chris@16 372
Chris@16 373 BOOST_FORCEINLINE
Chris@16 374 operator address_of_hack_type_() const
Chris@16 375 {
Chris@16 376 return boost::addressof(this->child0);
Chris@16 377 }
Chris@16 378
Chris@16 379
Chris@16 380
Chris@16 381
Chris@16 382 BOOST_FORCEINLINE
Chris@16 383 proto::expr<
Chris@16 384 proto::tag::assign
Chris@16 385 , list2<expr &, expr const &>
Chris@16 386 , 2
Chris@16 387 > const
Chris@16 388 operator =(expr const &a)
Chris@16 389 {
Chris@16 390 proto::expr<
Chris@16 391 proto::tag::assign
Chris@16 392 , list2<expr &, expr const &>
Chris@16 393 , 2
Chris@16 394 > that = {*this, a};
Chris@16 395 return that;
Chris@16 396 }
Chris@16 397
Chris@16 398
Chris@16 399
Chris@16 400
Chris@16 401 template<typename A>
Chris@16 402 BOOST_FORCEINLINE
Chris@16 403 proto::expr<
Chris@16 404 proto::tag::assign
Chris@16 405 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 406 , 2
Chris@16 407 > const
Chris@16 408 operator =(A &a) const
Chris@16 409 {
Chris@16 410 proto::expr<
Chris@16 411 proto::tag::assign
Chris@16 412 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 413 , 2
Chris@16 414 > that = {*this, proto::as_child(a)};
Chris@16 415 return that;
Chris@16 416 }
Chris@16 417
Chris@16 418
Chris@16 419 template<typename A>
Chris@16 420 BOOST_FORCEINLINE
Chris@16 421 proto::expr<
Chris@16 422 proto::tag::assign
Chris@16 423 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 424 , 2
Chris@16 425 > const
Chris@16 426 operator =(A const &a) const
Chris@16 427 {
Chris@16 428 proto::expr<
Chris@16 429 proto::tag::assign
Chris@16 430 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 431 , 2
Chris@16 432 > that = {*this, proto::as_child(a)};
Chris@16 433 return that;
Chris@16 434 }
Chris@16 435
Chris@16 436
Chris@16 437
Chris@16 438
Chris@16 439 template<typename A>
Chris@16 440 BOOST_FORCEINLINE
Chris@16 441 proto::expr<
Chris@16 442 proto::tag::subscript
Chris@16 443 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 444 , 2
Chris@16 445 > const
Chris@16 446 operator [](A &a) const
Chris@16 447 {
Chris@16 448 proto::expr<
Chris@16 449 proto::tag::subscript
Chris@16 450 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 451 , 2
Chris@16 452 > that = {*this, proto::as_child(a)};
Chris@16 453 return that;
Chris@16 454 }
Chris@16 455
Chris@16 456
Chris@16 457 template<typename A>
Chris@16 458 BOOST_FORCEINLINE
Chris@16 459 proto::expr<
Chris@16 460 proto::tag::subscript
Chris@16 461 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 462 , 2
Chris@16 463 > const
Chris@16 464 operator [](A const &a) const
Chris@16 465 {
Chris@16 466 proto::expr<
Chris@16 467 proto::tag::subscript
Chris@16 468 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 469 , 2
Chris@16 470 > that = {*this, proto::as_child(a)};
Chris@16 471 return that;
Chris@16 472 }
Chris@16 473
Chris@16 474
Chris@16 475 template<typename Sig>
Chris@16 476 struct result
Chris@16 477 {
Chris@16 478 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 479 };
Chris@16 480
Chris@16 481
Chris@16 482 template<typename ...A>
Chris@16 483 BOOST_FORCEINLINE
Chris@16 484 typename result_of::funop<
Chris@16 485 expr const(A const &...)
Chris@16 486 , expr
Chris@16 487 , default_domain
Chris@16 488 >::type const
Chris@16 489 operator ()(A const &... a) const
Chris@16 490 {
Chris@16 491 return result_of::funop<
Chris@16 492 expr const(A const &...)
Chris@16 493 , expr
Chris@16 494 , default_domain
Chris@16 495 >::call(*this, a...);
Chris@16 496 }
Chris@16 497 };
Chris@16 498
Chris@16 499
Chris@16 500
Chris@16 501
Chris@16 502
Chris@16 503
Chris@16 504
Chris@16 505
Chris@16 506
Chris@16 507
Chris@16 508
Chris@16 509
Chris@16 510
Chris@16 511
Chris@16 512
Chris@16 513
Chris@16 514
Chris@16 515
Chris@16 516
Chris@16 517
Chris@16 518
Chris@16 519
Chris@16 520
Chris@16 521
Chris@16 522
Chris@16 523
Chris@16 524
Chris@16 525 template<typename Tag , typename Arg0 , typename Arg1>
Chris@16 526 struct expr<Tag, list2<Arg0 , Arg1>, 2 >
Chris@16 527 {
Chris@16 528 typedef Tag proto_tag;
Chris@16 529 static const long proto_arity_c = 2;
Chris@16 530 typedef mpl::long_<2 > proto_arity;
Chris@16 531 typedef expr proto_base_expr;
Chris@16 532 typedef list2<Arg0 , Arg1> proto_args;
Chris@16 533 typedef basic_expr<Tag, proto_args, 2 > proto_grammar;
Chris@16 534 typedef default_domain proto_domain;
Chris@16 535 typedef default_generator proto_generator;
Chris@16 536 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 537 typedef expr proto_derived_expr;
Chris@16 538 typedef void proto_is_expr_;
Chris@16 539 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1;
Chris@16 540 typedef void proto_child2; typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 541
Chris@16 542
Chris@16 543 BOOST_FORCEINLINE
Chris@16 544 expr const &proto_base() const
Chris@16 545 {
Chris@16 546 return *this;
Chris@16 547 }
Chris@16 548
Chris@16 549
Chris@16 550 BOOST_FORCEINLINE
Chris@16 551 expr &proto_base()
Chris@16 552 {
Chris@16 553 return *this;
Chris@16 554 }
Chris@16 555
Chris@16 556
Chris@16 557
Chris@16 558 template<typename A0 , typename A1>
Chris@16 559 BOOST_FORCEINLINE
Chris@16 560 static expr const make(A0 const &a0 , A1 const &a1)
Chris@16 561 {
Chris@16 562 expr that = {a0 , a1};
Chris@16 563 return that;
Chris@16 564 }
Chris@16 565
Chris@16 566
Chris@16 567 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 568
Chris@16 569
Chris@16 570
Chris@16 571
Chris@16 572 BOOST_FORCEINLINE
Chris@16 573 proto::expr<
Chris@16 574 proto::tag::assign
Chris@16 575 , list2<expr &, expr const &>
Chris@16 576 , 2
Chris@16 577 > const
Chris@16 578 operator =(expr const &a)
Chris@16 579 {
Chris@16 580 proto::expr<
Chris@16 581 proto::tag::assign
Chris@16 582 , list2<expr &, expr const &>
Chris@16 583 , 2
Chris@16 584 > that = {*this, a};
Chris@16 585 return that;
Chris@16 586 }
Chris@16 587
Chris@16 588
Chris@16 589
Chris@16 590
Chris@16 591 template<typename A>
Chris@16 592 BOOST_FORCEINLINE
Chris@16 593 proto::expr<
Chris@16 594 proto::tag::assign
Chris@16 595 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 596 , 2
Chris@16 597 > const
Chris@16 598 operator =(A &a) const
Chris@16 599 {
Chris@16 600 proto::expr<
Chris@16 601 proto::tag::assign
Chris@16 602 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 603 , 2
Chris@16 604 > that = {*this, proto::as_child(a)};
Chris@16 605 return that;
Chris@16 606 }
Chris@16 607
Chris@16 608
Chris@16 609 template<typename A>
Chris@16 610 BOOST_FORCEINLINE
Chris@16 611 proto::expr<
Chris@16 612 proto::tag::assign
Chris@16 613 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 614 , 2
Chris@16 615 > const
Chris@16 616 operator =(A const &a) const
Chris@16 617 {
Chris@16 618 proto::expr<
Chris@16 619 proto::tag::assign
Chris@16 620 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 621 , 2
Chris@16 622 > that = {*this, proto::as_child(a)};
Chris@16 623 return that;
Chris@16 624 }
Chris@16 625
Chris@16 626
Chris@16 627
Chris@16 628
Chris@16 629 template<typename A>
Chris@16 630 BOOST_FORCEINLINE
Chris@16 631 proto::expr<
Chris@16 632 proto::tag::subscript
Chris@16 633 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 634 , 2
Chris@16 635 > const
Chris@16 636 operator [](A &a) const
Chris@16 637 {
Chris@16 638 proto::expr<
Chris@16 639 proto::tag::subscript
Chris@16 640 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 641 , 2
Chris@16 642 > that = {*this, proto::as_child(a)};
Chris@16 643 return that;
Chris@16 644 }
Chris@16 645
Chris@16 646
Chris@16 647 template<typename A>
Chris@16 648 BOOST_FORCEINLINE
Chris@16 649 proto::expr<
Chris@16 650 proto::tag::subscript
Chris@16 651 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 652 , 2
Chris@16 653 > const
Chris@16 654 operator [](A const &a) const
Chris@16 655 {
Chris@16 656 proto::expr<
Chris@16 657 proto::tag::subscript
Chris@16 658 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 659 , 2
Chris@16 660 > that = {*this, proto::as_child(a)};
Chris@16 661 return that;
Chris@16 662 }
Chris@16 663
Chris@16 664
Chris@16 665 template<typename Sig>
Chris@16 666 struct result
Chris@16 667 {
Chris@16 668 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 669 };
Chris@16 670
Chris@16 671
Chris@16 672 template<typename ...A>
Chris@16 673 BOOST_FORCEINLINE
Chris@16 674 typename result_of::funop<
Chris@16 675 expr const(A const &...)
Chris@16 676 , expr
Chris@16 677 , default_domain
Chris@16 678 >::type const
Chris@16 679 operator ()(A const &... a) const
Chris@16 680 {
Chris@16 681 return result_of::funop<
Chris@16 682 expr const(A const &...)
Chris@16 683 , expr
Chris@16 684 , default_domain
Chris@16 685 >::call(*this, a...);
Chris@16 686 }
Chris@16 687 };
Chris@16 688
Chris@16 689
Chris@16 690
Chris@16 691
Chris@16 692
Chris@16 693
Chris@16 694
Chris@16 695
Chris@16 696
Chris@16 697
Chris@16 698
Chris@16 699
Chris@16 700
Chris@16 701
Chris@16 702
Chris@16 703
Chris@16 704
Chris@16 705
Chris@16 706
Chris@16 707
Chris@16 708
Chris@16 709
Chris@16 710
Chris@16 711
Chris@16 712
Chris@16 713
Chris@16 714
Chris@16 715 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2>
Chris@16 716 struct expr<Tag, list3<Arg0 , Arg1 , Arg2>, 3 >
Chris@16 717 {
Chris@16 718 typedef Tag proto_tag;
Chris@16 719 static const long proto_arity_c = 3;
Chris@16 720 typedef mpl::long_<3 > proto_arity;
Chris@16 721 typedef expr proto_base_expr;
Chris@16 722 typedef list3<Arg0 , Arg1 , Arg2> proto_args;
Chris@16 723 typedef basic_expr<Tag, proto_args, 3 > proto_grammar;
Chris@16 724 typedef default_domain proto_domain;
Chris@16 725 typedef default_generator proto_generator;
Chris@16 726 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 727 typedef expr proto_derived_expr;
Chris@16 728 typedef void proto_is_expr_;
Chris@16 729 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2;
Chris@16 730 typedef void proto_child3; typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 731
Chris@16 732
Chris@16 733 BOOST_FORCEINLINE
Chris@16 734 expr const &proto_base() const
Chris@16 735 {
Chris@16 736 return *this;
Chris@16 737 }
Chris@16 738
Chris@16 739
Chris@16 740 BOOST_FORCEINLINE
Chris@16 741 expr &proto_base()
Chris@16 742 {
Chris@16 743 return *this;
Chris@16 744 }
Chris@16 745
Chris@16 746
Chris@16 747
Chris@16 748 template<typename A0 , typename A1 , typename A2>
Chris@16 749 BOOST_FORCEINLINE
Chris@16 750 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2)
Chris@16 751 {
Chris@16 752 expr that = {a0 , a1 , a2};
Chris@16 753 return that;
Chris@16 754 }
Chris@16 755
Chris@16 756
Chris@16 757 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 758
Chris@16 759
Chris@16 760
Chris@16 761
Chris@16 762 BOOST_FORCEINLINE
Chris@16 763 proto::expr<
Chris@16 764 proto::tag::assign
Chris@16 765 , list2<expr &, expr const &>
Chris@16 766 , 2
Chris@16 767 > const
Chris@16 768 operator =(expr const &a)
Chris@16 769 {
Chris@16 770 proto::expr<
Chris@16 771 proto::tag::assign
Chris@16 772 , list2<expr &, expr const &>
Chris@16 773 , 2
Chris@16 774 > that = {*this, a};
Chris@16 775 return that;
Chris@16 776 }
Chris@16 777
Chris@16 778
Chris@16 779
Chris@16 780
Chris@16 781 template<typename A>
Chris@16 782 BOOST_FORCEINLINE
Chris@16 783 proto::expr<
Chris@16 784 proto::tag::assign
Chris@16 785 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 786 , 2
Chris@16 787 > const
Chris@16 788 operator =(A &a) const
Chris@16 789 {
Chris@16 790 proto::expr<
Chris@16 791 proto::tag::assign
Chris@16 792 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 793 , 2
Chris@16 794 > that = {*this, proto::as_child(a)};
Chris@16 795 return that;
Chris@16 796 }
Chris@16 797
Chris@16 798
Chris@16 799 template<typename A>
Chris@16 800 BOOST_FORCEINLINE
Chris@16 801 proto::expr<
Chris@16 802 proto::tag::assign
Chris@16 803 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 804 , 2
Chris@16 805 > const
Chris@16 806 operator =(A const &a) const
Chris@16 807 {
Chris@16 808 proto::expr<
Chris@16 809 proto::tag::assign
Chris@16 810 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 811 , 2
Chris@16 812 > that = {*this, proto::as_child(a)};
Chris@16 813 return that;
Chris@16 814 }
Chris@16 815
Chris@16 816
Chris@16 817
Chris@16 818
Chris@16 819 template<typename A>
Chris@16 820 BOOST_FORCEINLINE
Chris@16 821 proto::expr<
Chris@16 822 proto::tag::subscript
Chris@16 823 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 824 , 2
Chris@16 825 > const
Chris@16 826 operator [](A &a) const
Chris@16 827 {
Chris@16 828 proto::expr<
Chris@16 829 proto::tag::subscript
Chris@16 830 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 831 , 2
Chris@16 832 > that = {*this, proto::as_child(a)};
Chris@16 833 return that;
Chris@16 834 }
Chris@16 835
Chris@16 836
Chris@16 837 template<typename A>
Chris@16 838 BOOST_FORCEINLINE
Chris@16 839 proto::expr<
Chris@16 840 proto::tag::subscript
Chris@16 841 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 842 , 2
Chris@16 843 > const
Chris@16 844 operator [](A const &a) const
Chris@16 845 {
Chris@16 846 proto::expr<
Chris@16 847 proto::tag::subscript
Chris@16 848 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 849 , 2
Chris@16 850 > that = {*this, proto::as_child(a)};
Chris@16 851 return that;
Chris@16 852 }
Chris@16 853
Chris@16 854
Chris@16 855 template<typename Sig>
Chris@16 856 struct result
Chris@16 857 {
Chris@16 858 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 859 };
Chris@16 860
Chris@16 861
Chris@16 862 template<typename ...A>
Chris@16 863 BOOST_FORCEINLINE
Chris@16 864 typename result_of::funop<
Chris@16 865 expr const(A const &...)
Chris@16 866 , expr
Chris@16 867 , default_domain
Chris@16 868 >::type const
Chris@16 869 operator ()(A const &... a) const
Chris@16 870 {
Chris@16 871 return result_of::funop<
Chris@16 872 expr const(A const &...)
Chris@16 873 , expr
Chris@16 874 , default_domain
Chris@16 875 >::call(*this, a...);
Chris@16 876 }
Chris@16 877 };
Chris@16 878
Chris@16 879
Chris@16 880
Chris@16 881
Chris@16 882
Chris@16 883
Chris@16 884
Chris@16 885
Chris@16 886
Chris@16 887
Chris@16 888
Chris@16 889
Chris@16 890
Chris@16 891
Chris@16 892
Chris@16 893
Chris@16 894
Chris@16 895
Chris@16 896
Chris@16 897
Chris@16 898
Chris@16 899
Chris@16 900
Chris@16 901
Chris@16 902
Chris@16 903
Chris@16 904
Chris@16 905 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3>
Chris@16 906 struct expr<Tag, list4<Arg0 , Arg1 , Arg2 , Arg3>, 4 >
Chris@16 907 {
Chris@16 908 typedef Tag proto_tag;
Chris@16 909 static const long proto_arity_c = 4;
Chris@16 910 typedef mpl::long_<4 > proto_arity;
Chris@16 911 typedef expr proto_base_expr;
Chris@16 912 typedef list4<Arg0 , Arg1 , Arg2 , Arg3> proto_args;
Chris@16 913 typedef basic_expr<Tag, proto_args, 4 > proto_grammar;
Chris@16 914 typedef default_domain proto_domain;
Chris@16 915 typedef default_generator proto_generator;
Chris@16 916 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 917 typedef expr proto_derived_expr;
Chris@16 918 typedef void proto_is_expr_;
Chris@16 919 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3;
Chris@16 920 typedef void proto_child4; typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 921
Chris@16 922
Chris@16 923 BOOST_FORCEINLINE
Chris@16 924 expr const &proto_base() const
Chris@16 925 {
Chris@16 926 return *this;
Chris@16 927 }
Chris@16 928
Chris@16 929
Chris@16 930 BOOST_FORCEINLINE
Chris@16 931 expr &proto_base()
Chris@16 932 {
Chris@16 933 return *this;
Chris@16 934 }
Chris@16 935
Chris@16 936
Chris@16 937
Chris@16 938 template<typename A0 , typename A1 , typename A2 , typename A3>
Chris@16 939 BOOST_FORCEINLINE
Chris@16 940 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3)
Chris@16 941 {
Chris@16 942 expr that = {a0 , a1 , a2 , a3};
Chris@16 943 return that;
Chris@16 944 }
Chris@16 945
Chris@16 946
Chris@16 947 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 948
Chris@16 949
Chris@16 950
Chris@16 951
Chris@16 952 BOOST_FORCEINLINE
Chris@16 953 proto::expr<
Chris@16 954 proto::tag::assign
Chris@16 955 , list2<expr &, expr const &>
Chris@16 956 , 2
Chris@16 957 > const
Chris@16 958 operator =(expr const &a)
Chris@16 959 {
Chris@16 960 proto::expr<
Chris@16 961 proto::tag::assign
Chris@16 962 , list2<expr &, expr const &>
Chris@16 963 , 2
Chris@16 964 > that = {*this, a};
Chris@16 965 return that;
Chris@16 966 }
Chris@16 967
Chris@16 968
Chris@16 969
Chris@16 970
Chris@16 971 template<typename A>
Chris@16 972 BOOST_FORCEINLINE
Chris@16 973 proto::expr<
Chris@16 974 proto::tag::assign
Chris@16 975 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 976 , 2
Chris@16 977 > const
Chris@16 978 operator =(A &a) const
Chris@16 979 {
Chris@16 980 proto::expr<
Chris@16 981 proto::tag::assign
Chris@16 982 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 983 , 2
Chris@16 984 > that = {*this, proto::as_child(a)};
Chris@16 985 return that;
Chris@16 986 }
Chris@16 987
Chris@16 988
Chris@16 989 template<typename A>
Chris@16 990 BOOST_FORCEINLINE
Chris@16 991 proto::expr<
Chris@16 992 proto::tag::assign
Chris@16 993 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 994 , 2
Chris@16 995 > const
Chris@16 996 operator =(A const &a) const
Chris@16 997 {
Chris@16 998 proto::expr<
Chris@16 999 proto::tag::assign
Chris@16 1000 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1001 , 2
Chris@16 1002 > that = {*this, proto::as_child(a)};
Chris@16 1003 return that;
Chris@16 1004 }
Chris@16 1005
Chris@16 1006
Chris@16 1007
Chris@16 1008
Chris@16 1009 template<typename A>
Chris@16 1010 BOOST_FORCEINLINE
Chris@16 1011 proto::expr<
Chris@16 1012 proto::tag::subscript
Chris@16 1013 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1014 , 2
Chris@16 1015 > const
Chris@16 1016 operator [](A &a) const
Chris@16 1017 {
Chris@16 1018 proto::expr<
Chris@16 1019 proto::tag::subscript
Chris@16 1020 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1021 , 2
Chris@16 1022 > that = {*this, proto::as_child(a)};
Chris@16 1023 return that;
Chris@16 1024 }
Chris@16 1025
Chris@16 1026
Chris@16 1027 template<typename A>
Chris@16 1028 BOOST_FORCEINLINE
Chris@16 1029 proto::expr<
Chris@16 1030 proto::tag::subscript
Chris@16 1031 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1032 , 2
Chris@16 1033 > const
Chris@16 1034 operator [](A const &a) const
Chris@16 1035 {
Chris@16 1036 proto::expr<
Chris@16 1037 proto::tag::subscript
Chris@16 1038 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1039 , 2
Chris@16 1040 > that = {*this, proto::as_child(a)};
Chris@16 1041 return that;
Chris@16 1042 }
Chris@16 1043
Chris@16 1044
Chris@16 1045 template<typename Sig>
Chris@16 1046 struct result
Chris@16 1047 {
Chris@16 1048 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1049 };
Chris@16 1050
Chris@16 1051
Chris@16 1052 template<typename ...A>
Chris@16 1053 BOOST_FORCEINLINE
Chris@16 1054 typename result_of::funop<
Chris@16 1055 expr const(A const &...)
Chris@16 1056 , expr
Chris@16 1057 , default_domain
Chris@16 1058 >::type const
Chris@16 1059 operator ()(A const &... a) const
Chris@16 1060 {
Chris@16 1061 return result_of::funop<
Chris@16 1062 expr const(A const &...)
Chris@16 1063 , expr
Chris@16 1064 , default_domain
Chris@16 1065 >::call(*this, a...);
Chris@16 1066 }
Chris@16 1067 };
Chris@16 1068
Chris@16 1069
Chris@16 1070
Chris@16 1071
Chris@16 1072
Chris@16 1073
Chris@16 1074
Chris@16 1075
Chris@16 1076
Chris@16 1077
Chris@16 1078
Chris@16 1079
Chris@16 1080
Chris@16 1081
Chris@16 1082
Chris@16 1083
Chris@16 1084
Chris@16 1085
Chris@16 1086
Chris@16 1087
Chris@16 1088
Chris@16 1089
Chris@16 1090
Chris@16 1091
Chris@16 1092
Chris@16 1093
Chris@16 1094
Chris@16 1095 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4>
Chris@16 1096 struct expr<Tag, list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4>, 5 >
Chris@16 1097 {
Chris@16 1098 typedef Tag proto_tag;
Chris@16 1099 static const long proto_arity_c = 5;
Chris@16 1100 typedef mpl::long_<5 > proto_arity;
Chris@16 1101 typedef expr proto_base_expr;
Chris@16 1102 typedef list5<Arg0 , Arg1 , Arg2 , Arg3 , Arg4> proto_args;
Chris@16 1103 typedef basic_expr<Tag, proto_args, 5 > proto_grammar;
Chris@16 1104 typedef default_domain proto_domain;
Chris@16 1105 typedef default_generator proto_generator;
Chris@16 1106 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 1107 typedef expr proto_derived_expr;
Chris@16 1108 typedef void proto_is_expr_;
Chris@16 1109 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4;
Chris@16 1110 typedef void proto_child5; typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 1111
Chris@16 1112
Chris@16 1113 BOOST_FORCEINLINE
Chris@16 1114 expr const &proto_base() const
Chris@16 1115 {
Chris@16 1116 return *this;
Chris@16 1117 }
Chris@16 1118
Chris@16 1119
Chris@16 1120 BOOST_FORCEINLINE
Chris@16 1121 expr &proto_base()
Chris@16 1122 {
Chris@16 1123 return *this;
Chris@16 1124 }
Chris@16 1125
Chris@16 1126
Chris@16 1127
Chris@16 1128 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4>
Chris@16 1129 BOOST_FORCEINLINE
Chris@16 1130 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4)
Chris@16 1131 {
Chris@16 1132 expr that = {a0 , a1 , a2 , a3 , a4};
Chris@16 1133 return that;
Chris@16 1134 }
Chris@16 1135
Chris@16 1136
Chris@16 1137 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 1138
Chris@16 1139
Chris@16 1140
Chris@16 1141
Chris@16 1142 BOOST_FORCEINLINE
Chris@16 1143 proto::expr<
Chris@16 1144 proto::tag::assign
Chris@16 1145 , list2<expr &, expr const &>
Chris@16 1146 , 2
Chris@16 1147 > const
Chris@16 1148 operator =(expr const &a)
Chris@16 1149 {
Chris@16 1150 proto::expr<
Chris@16 1151 proto::tag::assign
Chris@16 1152 , list2<expr &, expr const &>
Chris@16 1153 , 2
Chris@16 1154 > that = {*this, a};
Chris@16 1155 return that;
Chris@16 1156 }
Chris@16 1157
Chris@16 1158
Chris@16 1159
Chris@16 1160
Chris@16 1161 template<typename A>
Chris@16 1162 BOOST_FORCEINLINE
Chris@16 1163 proto::expr<
Chris@16 1164 proto::tag::assign
Chris@16 1165 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1166 , 2
Chris@16 1167 > const
Chris@16 1168 operator =(A &a) const
Chris@16 1169 {
Chris@16 1170 proto::expr<
Chris@16 1171 proto::tag::assign
Chris@16 1172 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1173 , 2
Chris@16 1174 > that = {*this, proto::as_child(a)};
Chris@16 1175 return that;
Chris@16 1176 }
Chris@16 1177
Chris@16 1178
Chris@16 1179 template<typename A>
Chris@16 1180 BOOST_FORCEINLINE
Chris@16 1181 proto::expr<
Chris@16 1182 proto::tag::assign
Chris@16 1183 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1184 , 2
Chris@16 1185 > const
Chris@16 1186 operator =(A const &a) const
Chris@16 1187 {
Chris@16 1188 proto::expr<
Chris@16 1189 proto::tag::assign
Chris@16 1190 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1191 , 2
Chris@16 1192 > that = {*this, proto::as_child(a)};
Chris@16 1193 return that;
Chris@16 1194 }
Chris@16 1195
Chris@16 1196
Chris@16 1197
Chris@16 1198
Chris@16 1199 template<typename A>
Chris@16 1200 BOOST_FORCEINLINE
Chris@16 1201 proto::expr<
Chris@16 1202 proto::tag::subscript
Chris@16 1203 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1204 , 2
Chris@16 1205 > const
Chris@16 1206 operator [](A &a) const
Chris@16 1207 {
Chris@16 1208 proto::expr<
Chris@16 1209 proto::tag::subscript
Chris@16 1210 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1211 , 2
Chris@16 1212 > that = {*this, proto::as_child(a)};
Chris@16 1213 return that;
Chris@16 1214 }
Chris@16 1215
Chris@16 1216
Chris@16 1217 template<typename A>
Chris@16 1218 BOOST_FORCEINLINE
Chris@16 1219 proto::expr<
Chris@16 1220 proto::tag::subscript
Chris@16 1221 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1222 , 2
Chris@16 1223 > const
Chris@16 1224 operator [](A const &a) const
Chris@16 1225 {
Chris@16 1226 proto::expr<
Chris@16 1227 proto::tag::subscript
Chris@16 1228 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1229 , 2
Chris@16 1230 > that = {*this, proto::as_child(a)};
Chris@16 1231 return that;
Chris@16 1232 }
Chris@16 1233
Chris@16 1234
Chris@16 1235 template<typename Sig>
Chris@16 1236 struct result
Chris@16 1237 {
Chris@16 1238 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1239 };
Chris@16 1240
Chris@16 1241
Chris@16 1242 template<typename ...A>
Chris@16 1243 BOOST_FORCEINLINE
Chris@16 1244 typename result_of::funop<
Chris@16 1245 expr const(A const &...)
Chris@16 1246 , expr
Chris@16 1247 , default_domain
Chris@16 1248 >::type const
Chris@16 1249 operator ()(A const &... a) const
Chris@16 1250 {
Chris@16 1251 return result_of::funop<
Chris@16 1252 expr const(A const &...)
Chris@16 1253 , expr
Chris@16 1254 , default_domain
Chris@16 1255 >::call(*this, a...);
Chris@16 1256 }
Chris@16 1257 };
Chris@16 1258
Chris@16 1259
Chris@16 1260
Chris@16 1261
Chris@16 1262
Chris@16 1263
Chris@16 1264
Chris@16 1265
Chris@16 1266
Chris@16 1267
Chris@16 1268
Chris@16 1269
Chris@16 1270
Chris@16 1271
Chris@16 1272
Chris@16 1273
Chris@16 1274
Chris@16 1275
Chris@16 1276
Chris@16 1277
Chris@16 1278
Chris@16 1279
Chris@16 1280
Chris@16 1281
Chris@16 1282
Chris@16 1283
Chris@16 1284
Chris@16 1285 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5>
Chris@16 1286 struct expr<Tag, list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5>, 6 >
Chris@16 1287 {
Chris@16 1288 typedef Tag proto_tag;
Chris@16 1289 static const long proto_arity_c = 6;
Chris@16 1290 typedef mpl::long_<6 > proto_arity;
Chris@16 1291 typedef expr proto_base_expr;
Chris@16 1292 typedef list6<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5> proto_args;
Chris@16 1293 typedef basic_expr<Tag, proto_args, 6 > proto_grammar;
Chris@16 1294 typedef default_domain proto_domain;
Chris@16 1295 typedef default_generator proto_generator;
Chris@16 1296 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 1297 typedef expr proto_derived_expr;
Chris@16 1298 typedef void proto_is_expr_;
Chris@16 1299 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5;
Chris@16 1300 typedef void proto_child6; typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 1301
Chris@16 1302
Chris@16 1303 BOOST_FORCEINLINE
Chris@16 1304 expr const &proto_base() const
Chris@16 1305 {
Chris@16 1306 return *this;
Chris@16 1307 }
Chris@16 1308
Chris@16 1309
Chris@16 1310 BOOST_FORCEINLINE
Chris@16 1311 expr &proto_base()
Chris@16 1312 {
Chris@16 1313 return *this;
Chris@16 1314 }
Chris@16 1315
Chris@16 1316
Chris@16 1317
Chris@16 1318 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5>
Chris@16 1319 BOOST_FORCEINLINE
Chris@16 1320 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5)
Chris@16 1321 {
Chris@16 1322 expr that = {a0 , a1 , a2 , a3 , a4 , a5};
Chris@16 1323 return that;
Chris@16 1324 }
Chris@16 1325
Chris@16 1326
Chris@16 1327 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 1328
Chris@16 1329
Chris@16 1330
Chris@16 1331
Chris@16 1332 BOOST_FORCEINLINE
Chris@16 1333 proto::expr<
Chris@16 1334 proto::tag::assign
Chris@16 1335 , list2<expr &, expr const &>
Chris@16 1336 , 2
Chris@16 1337 > const
Chris@16 1338 operator =(expr const &a)
Chris@16 1339 {
Chris@16 1340 proto::expr<
Chris@16 1341 proto::tag::assign
Chris@16 1342 , list2<expr &, expr const &>
Chris@16 1343 , 2
Chris@16 1344 > that = {*this, a};
Chris@16 1345 return that;
Chris@16 1346 }
Chris@16 1347
Chris@16 1348
Chris@16 1349
Chris@16 1350
Chris@16 1351 template<typename A>
Chris@16 1352 BOOST_FORCEINLINE
Chris@16 1353 proto::expr<
Chris@16 1354 proto::tag::assign
Chris@16 1355 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1356 , 2
Chris@16 1357 > const
Chris@16 1358 operator =(A &a) const
Chris@16 1359 {
Chris@16 1360 proto::expr<
Chris@16 1361 proto::tag::assign
Chris@16 1362 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1363 , 2
Chris@16 1364 > that = {*this, proto::as_child(a)};
Chris@16 1365 return that;
Chris@16 1366 }
Chris@16 1367
Chris@16 1368
Chris@16 1369 template<typename A>
Chris@16 1370 BOOST_FORCEINLINE
Chris@16 1371 proto::expr<
Chris@16 1372 proto::tag::assign
Chris@16 1373 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1374 , 2
Chris@16 1375 > const
Chris@16 1376 operator =(A const &a) const
Chris@16 1377 {
Chris@16 1378 proto::expr<
Chris@16 1379 proto::tag::assign
Chris@16 1380 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1381 , 2
Chris@16 1382 > that = {*this, proto::as_child(a)};
Chris@16 1383 return that;
Chris@16 1384 }
Chris@16 1385
Chris@16 1386
Chris@16 1387
Chris@16 1388
Chris@16 1389 template<typename A>
Chris@16 1390 BOOST_FORCEINLINE
Chris@16 1391 proto::expr<
Chris@16 1392 proto::tag::subscript
Chris@16 1393 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1394 , 2
Chris@16 1395 > const
Chris@16 1396 operator [](A &a) const
Chris@16 1397 {
Chris@16 1398 proto::expr<
Chris@16 1399 proto::tag::subscript
Chris@16 1400 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1401 , 2
Chris@16 1402 > that = {*this, proto::as_child(a)};
Chris@16 1403 return that;
Chris@16 1404 }
Chris@16 1405
Chris@16 1406
Chris@16 1407 template<typename A>
Chris@16 1408 BOOST_FORCEINLINE
Chris@16 1409 proto::expr<
Chris@16 1410 proto::tag::subscript
Chris@16 1411 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1412 , 2
Chris@16 1413 > const
Chris@16 1414 operator [](A const &a) const
Chris@16 1415 {
Chris@16 1416 proto::expr<
Chris@16 1417 proto::tag::subscript
Chris@16 1418 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1419 , 2
Chris@16 1420 > that = {*this, proto::as_child(a)};
Chris@16 1421 return that;
Chris@16 1422 }
Chris@16 1423
Chris@16 1424
Chris@16 1425 template<typename Sig>
Chris@16 1426 struct result
Chris@16 1427 {
Chris@16 1428 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1429 };
Chris@16 1430
Chris@16 1431
Chris@16 1432 template<typename ...A>
Chris@16 1433 BOOST_FORCEINLINE
Chris@16 1434 typename result_of::funop<
Chris@16 1435 expr const(A const &...)
Chris@16 1436 , expr
Chris@16 1437 , default_domain
Chris@16 1438 >::type const
Chris@16 1439 operator ()(A const &... a) const
Chris@16 1440 {
Chris@16 1441 return result_of::funop<
Chris@16 1442 expr const(A const &...)
Chris@16 1443 , expr
Chris@16 1444 , default_domain
Chris@16 1445 >::call(*this, a...);
Chris@16 1446 }
Chris@16 1447 };
Chris@16 1448
Chris@16 1449
Chris@16 1450
Chris@16 1451
Chris@16 1452
Chris@16 1453
Chris@16 1454
Chris@16 1455
Chris@16 1456
Chris@16 1457
Chris@16 1458
Chris@16 1459
Chris@16 1460
Chris@16 1461
Chris@16 1462
Chris@16 1463
Chris@16 1464
Chris@16 1465
Chris@16 1466
Chris@16 1467
Chris@16 1468
Chris@16 1469
Chris@16 1470
Chris@16 1471
Chris@16 1472
Chris@16 1473
Chris@16 1474
Chris@16 1475 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6>
Chris@16 1476 struct expr<Tag, list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6>, 7 >
Chris@16 1477 {
Chris@16 1478 typedef Tag proto_tag;
Chris@16 1479 static const long proto_arity_c = 7;
Chris@16 1480 typedef mpl::long_<7 > proto_arity;
Chris@16 1481 typedef expr proto_base_expr;
Chris@16 1482 typedef list7<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6> proto_args;
Chris@16 1483 typedef basic_expr<Tag, proto_args, 7 > proto_grammar;
Chris@16 1484 typedef default_domain proto_domain;
Chris@16 1485 typedef default_generator proto_generator;
Chris@16 1486 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 1487 typedef expr proto_derived_expr;
Chris@16 1488 typedef void proto_is_expr_;
Chris@16 1489 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6;
Chris@16 1490 typedef void proto_child7; typedef void proto_child8; typedef void proto_child9;
Chris@16 1491
Chris@16 1492
Chris@16 1493 BOOST_FORCEINLINE
Chris@16 1494 expr const &proto_base() const
Chris@16 1495 {
Chris@16 1496 return *this;
Chris@16 1497 }
Chris@16 1498
Chris@16 1499
Chris@16 1500 BOOST_FORCEINLINE
Chris@16 1501 expr &proto_base()
Chris@16 1502 {
Chris@16 1503 return *this;
Chris@16 1504 }
Chris@16 1505
Chris@16 1506
Chris@16 1507
Chris@16 1508 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6>
Chris@16 1509 BOOST_FORCEINLINE
Chris@16 1510 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6)
Chris@16 1511 {
Chris@16 1512 expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6};
Chris@16 1513 return that;
Chris@16 1514 }
Chris@16 1515
Chris@16 1516
Chris@16 1517 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 1518
Chris@16 1519
Chris@16 1520
Chris@16 1521
Chris@16 1522 BOOST_FORCEINLINE
Chris@16 1523 proto::expr<
Chris@16 1524 proto::tag::assign
Chris@16 1525 , list2<expr &, expr const &>
Chris@16 1526 , 2
Chris@16 1527 > const
Chris@16 1528 operator =(expr const &a)
Chris@16 1529 {
Chris@16 1530 proto::expr<
Chris@16 1531 proto::tag::assign
Chris@16 1532 , list2<expr &, expr const &>
Chris@16 1533 , 2
Chris@16 1534 > that = {*this, a};
Chris@16 1535 return that;
Chris@16 1536 }
Chris@16 1537
Chris@16 1538
Chris@16 1539
Chris@16 1540
Chris@16 1541 template<typename A>
Chris@16 1542 BOOST_FORCEINLINE
Chris@16 1543 proto::expr<
Chris@16 1544 proto::tag::assign
Chris@16 1545 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1546 , 2
Chris@16 1547 > const
Chris@16 1548 operator =(A &a) const
Chris@16 1549 {
Chris@16 1550 proto::expr<
Chris@16 1551 proto::tag::assign
Chris@16 1552 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1553 , 2
Chris@16 1554 > that = {*this, proto::as_child(a)};
Chris@16 1555 return that;
Chris@16 1556 }
Chris@16 1557
Chris@16 1558
Chris@16 1559 template<typename A>
Chris@16 1560 BOOST_FORCEINLINE
Chris@16 1561 proto::expr<
Chris@16 1562 proto::tag::assign
Chris@16 1563 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1564 , 2
Chris@16 1565 > const
Chris@16 1566 operator =(A const &a) const
Chris@16 1567 {
Chris@16 1568 proto::expr<
Chris@16 1569 proto::tag::assign
Chris@16 1570 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1571 , 2
Chris@16 1572 > that = {*this, proto::as_child(a)};
Chris@16 1573 return that;
Chris@16 1574 }
Chris@16 1575
Chris@16 1576
Chris@16 1577
Chris@16 1578
Chris@16 1579 template<typename A>
Chris@16 1580 BOOST_FORCEINLINE
Chris@16 1581 proto::expr<
Chris@16 1582 proto::tag::subscript
Chris@16 1583 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1584 , 2
Chris@16 1585 > const
Chris@16 1586 operator [](A &a) const
Chris@16 1587 {
Chris@16 1588 proto::expr<
Chris@16 1589 proto::tag::subscript
Chris@16 1590 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1591 , 2
Chris@16 1592 > that = {*this, proto::as_child(a)};
Chris@16 1593 return that;
Chris@16 1594 }
Chris@16 1595
Chris@16 1596
Chris@16 1597 template<typename A>
Chris@16 1598 BOOST_FORCEINLINE
Chris@16 1599 proto::expr<
Chris@16 1600 proto::tag::subscript
Chris@16 1601 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1602 , 2
Chris@16 1603 > const
Chris@16 1604 operator [](A const &a) const
Chris@16 1605 {
Chris@16 1606 proto::expr<
Chris@16 1607 proto::tag::subscript
Chris@16 1608 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1609 , 2
Chris@16 1610 > that = {*this, proto::as_child(a)};
Chris@16 1611 return that;
Chris@16 1612 }
Chris@16 1613
Chris@16 1614
Chris@16 1615 template<typename Sig>
Chris@16 1616 struct result
Chris@16 1617 {
Chris@16 1618 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1619 };
Chris@16 1620
Chris@16 1621
Chris@16 1622 template<typename ...A>
Chris@16 1623 BOOST_FORCEINLINE
Chris@16 1624 typename result_of::funop<
Chris@16 1625 expr const(A const &...)
Chris@16 1626 , expr
Chris@16 1627 , default_domain
Chris@16 1628 >::type const
Chris@16 1629 operator ()(A const &... a) const
Chris@16 1630 {
Chris@16 1631 return result_of::funop<
Chris@16 1632 expr const(A const &...)
Chris@16 1633 , expr
Chris@16 1634 , default_domain
Chris@16 1635 >::call(*this, a...);
Chris@16 1636 }
Chris@16 1637 };
Chris@16 1638
Chris@16 1639
Chris@16 1640
Chris@16 1641
Chris@16 1642
Chris@16 1643
Chris@16 1644
Chris@16 1645
Chris@16 1646
Chris@16 1647
Chris@16 1648
Chris@16 1649
Chris@16 1650
Chris@16 1651
Chris@16 1652
Chris@16 1653
Chris@16 1654
Chris@16 1655
Chris@16 1656
Chris@16 1657
Chris@16 1658
Chris@16 1659
Chris@16 1660
Chris@16 1661
Chris@16 1662
Chris@16 1663
Chris@16 1664
Chris@16 1665 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7>
Chris@16 1666 struct expr<Tag, list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7>, 8 >
Chris@16 1667 {
Chris@16 1668 typedef Tag proto_tag;
Chris@16 1669 static const long proto_arity_c = 8;
Chris@16 1670 typedef mpl::long_<8 > proto_arity;
Chris@16 1671 typedef expr proto_base_expr;
Chris@16 1672 typedef list8<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7> proto_args;
Chris@16 1673 typedef basic_expr<Tag, proto_args, 8 > proto_grammar;
Chris@16 1674 typedef default_domain proto_domain;
Chris@16 1675 typedef default_generator proto_generator;
Chris@16 1676 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 1677 typedef expr proto_derived_expr;
Chris@16 1678 typedef void proto_is_expr_;
Chris@16 1679 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7;
Chris@16 1680 typedef void proto_child8; typedef void proto_child9;
Chris@16 1681
Chris@16 1682
Chris@16 1683 BOOST_FORCEINLINE
Chris@16 1684 expr const &proto_base() const
Chris@16 1685 {
Chris@16 1686 return *this;
Chris@16 1687 }
Chris@16 1688
Chris@16 1689
Chris@16 1690 BOOST_FORCEINLINE
Chris@16 1691 expr &proto_base()
Chris@16 1692 {
Chris@16 1693 return *this;
Chris@16 1694 }
Chris@16 1695
Chris@16 1696
Chris@16 1697
Chris@16 1698 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7>
Chris@16 1699 BOOST_FORCEINLINE
Chris@16 1700 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7)
Chris@16 1701 {
Chris@16 1702 expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7};
Chris@16 1703 return that;
Chris@16 1704 }
Chris@16 1705
Chris@16 1706
Chris@16 1707 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 1708
Chris@16 1709
Chris@16 1710
Chris@16 1711
Chris@16 1712 BOOST_FORCEINLINE
Chris@16 1713 proto::expr<
Chris@16 1714 proto::tag::assign
Chris@16 1715 , list2<expr &, expr const &>
Chris@16 1716 , 2
Chris@16 1717 > const
Chris@16 1718 operator =(expr const &a)
Chris@16 1719 {
Chris@16 1720 proto::expr<
Chris@16 1721 proto::tag::assign
Chris@16 1722 , list2<expr &, expr const &>
Chris@16 1723 , 2
Chris@16 1724 > that = {*this, a};
Chris@16 1725 return that;
Chris@16 1726 }
Chris@16 1727
Chris@16 1728
Chris@16 1729
Chris@16 1730
Chris@16 1731 template<typename A>
Chris@16 1732 BOOST_FORCEINLINE
Chris@16 1733 proto::expr<
Chris@16 1734 proto::tag::assign
Chris@16 1735 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1736 , 2
Chris@16 1737 > const
Chris@16 1738 operator =(A &a) const
Chris@16 1739 {
Chris@16 1740 proto::expr<
Chris@16 1741 proto::tag::assign
Chris@16 1742 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1743 , 2
Chris@16 1744 > that = {*this, proto::as_child(a)};
Chris@16 1745 return that;
Chris@16 1746 }
Chris@16 1747
Chris@16 1748
Chris@16 1749 template<typename A>
Chris@16 1750 BOOST_FORCEINLINE
Chris@16 1751 proto::expr<
Chris@16 1752 proto::tag::assign
Chris@16 1753 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1754 , 2
Chris@16 1755 > const
Chris@16 1756 operator =(A const &a) const
Chris@16 1757 {
Chris@16 1758 proto::expr<
Chris@16 1759 proto::tag::assign
Chris@16 1760 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1761 , 2
Chris@16 1762 > that = {*this, proto::as_child(a)};
Chris@16 1763 return that;
Chris@16 1764 }
Chris@16 1765
Chris@16 1766
Chris@16 1767
Chris@16 1768
Chris@16 1769 template<typename A>
Chris@16 1770 BOOST_FORCEINLINE
Chris@16 1771 proto::expr<
Chris@16 1772 proto::tag::subscript
Chris@16 1773 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1774 , 2
Chris@16 1775 > const
Chris@16 1776 operator [](A &a) const
Chris@16 1777 {
Chris@16 1778 proto::expr<
Chris@16 1779 proto::tag::subscript
Chris@16 1780 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1781 , 2
Chris@16 1782 > that = {*this, proto::as_child(a)};
Chris@16 1783 return that;
Chris@16 1784 }
Chris@16 1785
Chris@16 1786
Chris@16 1787 template<typename A>
Chris@16 1788 BOOST_FORCEINLINE
Chris@16 1789 proto::expr<
Chris@16 1790 proto::tag::subscript
Chris@16 1791 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1792 , 2
Chris@16 1793 > const
Chris@16 1794 operator [](A const &a) const
Chris@16 1795 {
Chris@16 1796 proto::expr<
Chris@16 1797 proto::tag::subscript
Chris@16 1798 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1799 , 2
Chris@16 1800 > that = {*this, proto::as_child(a)};
Chris@16 1801 return that;
Chris@16 1802 }
Chris@16 1803
Chris@16 1804
Chris@16 1805 template<typename Sig>
Chris@16 1806 struct result
Chris@16 1807 {
Chris@16 1808 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1809 };
Chris@16 1810
Chris@16 1811
Chris@16 1812 template<typename ...A>
Chris@16 1813 BOOST_FORCEINLINE
Chris@16 1814 typename result_of::funop<
Chris@16 1815 expr const(A const &...)
Chris@16 1816 , expr
Chris@16 1817 , default_domain
Chris@16 1818 >::type const
Chris@16 1819 operator ()(A const &... a) const
Chris@16 1820 {
Chris@16 1821 return result_of::funop<
Chris@16 1822 expr const(A const &...)
Chris@16 1823 , expr
Chris@16 1824 , default_domain
Chris@16 1825 >::call(*this, a...);
Chris@16 1826 }
Chris@16 1827 };
Chris@16 1828
Chris@16 1829
Chris@16 1830
Chris@16 1831
Chris@16 1832
Chris@16 1833
Chris@16 1834
Chris@16 1835
Chris@16 1836
Chris@16 1837
Chris@16 1838
Chris@16 1839
Chris@16 1840
Chris@16 1841
Chris@16 1842
Chris@16 1843
Chris@16 1844
Chris@16 1845
Chris@16 1846
Chris@16 1847
Chris@16 1848
Chris@16 1849
Chris@16 1850
Chris@16 1851
Chris@16 1852
Chris@16 1853
Chris@16 1854
Chris@16 1855 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8>
Chris@16 1856 struct expr<Tag, list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8>, 9 >
Chris@16 1857 {
Chris@16 1858 typedef Tag proto_tag;
Chris@16 1859 static const long proto_arity_c = 9;
Chris@16 1860 typedef mpl::long_<9 > proto_arity;
Chris@16 1861 typedef expr proto_base_expr;
Chris@16 1862 typedef list9<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8> proto_args;
Chris@16 1863 typedef basic_expr<Tag, proto_args, 9 > proto_grammar;
Chris@16 1864 typedef default_domain proto_domain;
Chris@16 1865 typedef default_generator proto_generator;
Chris@16 1866 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 1867 typedef expr proto_derived_expr;
Chris@16 1868 typedef void proto_is_expr_;
Chris@16 1869 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8;
Chris@16 1870 typedef void proto_child9;
Chris@16 1871
Chris@16 1872
Chris@16 1873 BOOST_FORCEINLINE
Chris@16 1874 expr const &proto_base() const
Chris@16 1875 {
Chris@16 1876 return *this;
Chris@16 1877 }
Chris@16 1878
Chris@16 1879
Chris@16 1880 BOOST_FORCEINLINE
Chris@16 1881 expr &proto_base()
Chris@16 1882 {
Chris@16 1883 return *this;
Chris@16 1884 }
Chris@16 1885
Chris@16 1886
Chris@16 1887
Chris@16 1888 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8>
Chris@16 1889 BOOST_FORCEINLINE
Chris@16 1890 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8)
Chris@16 1891 {
Chris@16 1892 expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8};
Chris@16 1893 return that;
Chris@16 1894 }
Chris@16 1895
Chris@16 1896
Chris@16 1897 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 1898
Chris@16 1899
Chris@16 1900
Chris@16 1901
Chris@16 1902 BOOST_FORCEINLINE
Chris@16 1903 proto::expr<
Chris@16 1904 proto::tag::assign
Chris@16 1905 , list2<expr &, expr const &>
Chris@16 1906 , 2
Chris@16 1907 > const
Chris@16 1908 operator =(expr const &a)
Chris@16 1909 {
Chris@16 1910 proto::expr<
Chris@16 1911 proto::tag::assign
Chris@16 1912 , list2<expr &, expr const &>
Chris@16 1913 , 2
Chris@16 1914 > that = {*this, a};
Chris@16 1915 return that;
Chris@16 1916 }
Chris@16 1917
Chris@16 1918
Chris@16 1919
Chris@16 1920
Chris@16 1921 template<typename A>
Chris@16 1922 BOOST_FORCEINLINE
Chris@16 1923 proto::expr<
Chris@16 1924 proto::tag::assign
Chris@16 1925 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1926 , 2
Chris@16 1927 > const
Chris@16 1928 operator =(A &a) const
Chris@16 1929 {
Chris@16 1930 proto::expr<
Chris@16 1931 proto::tag::assign
Chris@16 1932 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1933 , 2
Chris@16 1934 > that = {*this, proto::as_child(a)};
Chris@16 1935 return that;
Chris@16 1936 }
Chris@16 1937
Chris@16 1938
Chris@16 1939 template<typename A>
Chris@16 1940 BOOST_FORCEINLINE
Chris@16 1941 proto::expr<
Chris@16 1942 proto::tag::assign
Chris@16 1943 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1944 , 2
Chris@16 1945 > const
Chris@16 1946 operator =(A const &a) const
Chris@16 1947 {
Chris@16 1948 proto::expr<
Chris@16 1949 proto::tag::assign
Chris@16 1950 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1951 , 2
Chris@16 1952 > that = {*this, proto::as_child(a)};
Chris@16 1953 return that;
Chris@16 1954 }
Chris@16 1955
Chris@16 1956
Chris@16 1957
Chris@16 1958
Chris@16 1959 template<typename A>
Chris@16 1960 BOOST_FORCEINLINE
Chris@16 1961 proto::expr<
Chris@16 1962 proto::tag::subscript
Chris@16 1963 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1964 , 2
Chris@16 1965 > const
Chris@16 1966 operator [](A &a) const
Chris@16 1967 {
Chris@16 1968 proto::expr<
Chris@16 1969 proto::tag::subscript
Chris@16 1970 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 1971 , 2
Chris@16 1972 > that = {*this, proto::as_child(a)};
Chris@16 1973 return that;
Chris@16 1974 }
Chris@16 1975
Chris@16 1976
Chris@16 1977 template<typename A>
Chris@16 1978 BOOST_FORCEINLINE
Chris@16 1979 proto::expr<
Chris@16 1980 proto::tag::subscript
Chris@16 1981 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1982 , 2
Chris@16 1983 > const
Chris@16 1984 operator [](A const &a) const
Chris@16 1985 {
Chris@16 1986 proto::expr<
Chris@16 1987 proto::tag::subscript
Chris@16 1988 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 1989 , 2
Chris@16 1990 > that = {*this, proto::as_child(a)};
Chris@16 1991 return that;
Chris@16 1992 }
Chris@16 1993
Chris@16 1994
Chris@16 1995 template<typename Sig>
Chris@16 1996 struct result
Chris@16 1997 {
Chris@16 1998 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 1999 };
Chris@16 2000
Chris@16 2001
Chris@16 2002 template<typename ...A>
Chris@16 2003 BOOST_FORCEINLINE
Chris@16 2004 typename result_of::funop<
Chris@16 2005 expr const(A const &...)
Chris@16 2006 , expr
Chris@16 2007 , default_domain
Chris@16 2008 >::type const
Chris@16 2009 operator ()(A const &... a) const
Chris@16 2010 {
Chris@16 2011 return result_of::funop<
Chris@16 2012 expr const(A const &...)
Chris@16 2013 , expr
Chris@16 2014 , default_domain
Chris@16 2015 >::call(*this, a...);
Chris@16 2016 }
Chris@16 2017 };
Chris@16 2018
Chris@16 2019
Chris@16 2020
Chris@16 2021
Chris@16 2022
Chris@16 2023
Chris@16 2024
Chris@16 2025
Chris@16 2026
Chris@16 2027
Chris@16 2028
Chris@16 2029
Chris@16 2030
Chris@16 2031
Chris@16 2032
Chris@16 2033
Chris@16 2034
Chris@16 2035
Chris@16 2036
Chris@16 2037
Chris@16 2038
Chris@16 2039
Chris@16 2040
Chris@16 2041
Chris@16 2042
Chris@16 2043
Chris@16 2044
Chris@16 2045 template<typename Tag , typename Arg0 , typename Arg1 , typename Arg2 , typename Arg3 , typename Arg4 , typename Arg5 , typename Arg6 , typename Arg7 , typename Arg8 , typename Arg9>
Chris@16 2046 struct expr<Tag, list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9>, 10 >
Chris@16 2047 {
Chris@16 2048 typedef Tag proto_tag;
Chris@16 2049 static const long proto_arity_c = 10;
Chris@16 2050 typedef mpl::long_<10 > proto_arity;
Chris@16 2051 typedef expr proto_base_expr;
Chris@16 2052 typedef list10<Arg0 , Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 , Arg8 , Arg9> proto_args;
Chris@16 2053 typedef basic_expr<Tag, proto_args, 10 > proto_grammar;
Chris@16 2054 typedef default_domain proto_domain;
Chris@16 2055 typedef default_generator proto_generator;
Chris@16 2056 typedef proto::tag::proto_expr<Tag, proto_domain> fusion_tag;
Chris@16 2057 typedef expr proto_derived_expr;
Chris@16 2058 typedef void proto_is_expr_;
Chris@16 2059 typedef Arg0 proto_child0; proto_child0 child0; typedef Arg1 proto_child1; proto_child1 child1; typedef Arg2 proto_child2; proto_child2 child2; typedef Arg3 proto_child3; proto_child3 child3; typedef Arg4 proto_child4; proto_child4 child4; typedef Arg5 proto_child5; proto_child5 child5; typedef Arg6 proto_child6; proto_child6 child6; typedef Arg7 proto_child7; proto_child7 child7; typedef Arg8 proto_child8; proto_child8 child8; typedef Arg9 proto_child9; proto_child9 child9;
Chris@16 2060
Chris@16 2061
Chris@16 2062
Chris@16 2063 BOOST_FORCEINLINE
Chris@16 2064 expr const &proto_base() const
Chris@16 2065 {
Chris@16 2066 return *this;
Chris@16 2067 }
Chris@16 2068
Chris@16 2069
Chris@16 2070 BOOST_FORCEINLINE
Chris@16 2071 expr &proto_base()
Chris@16 2072 {
Chris@16 2073 return *this;
Chris@16 2074 }
Chris@16 2075
Chris@16 2076
Chris@16 2077
Chris@16 2078 template<typename A0 , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9>
Chris@16 2079 BOOST_FORCEINLINE
Chris@16 2080 static expr const make(A0 const &a0 , A1 const &a1 , A2 const &a2 , A3 const &a3 , A4 const &a4 , A5 const &a5 , A6 const &a6 , A7 const &a7 , A8 const &a8 , A9 const &a9)
Chris@16 2081 {
Chris@16 2082 expr that = {a0 , a1 , a2 , a3 , a4 , a5 , a6 , a7 , a8 , a9};
Chris@16 2083 return that;
Chris@16 2084 }
Chris@16 2085
Chris@16 2086
Chris@16 2087 typedef detail::not_a_valid_type address_of_hack_type_;
Chris@16 2088
Chris@16 2089
Chris@16 2090
Chris@16 2091
Chris@16 2092 BOOST_FORCEINLINE
Chris@16 2093 proto::expr<
Chris@16 2094 proto::tag::assign
Chris@16 2095 , list2<expr &, expr const &>
Chris@16 2096 , 2
Chris@16 2097 > const
Chris@16 2098 operator =(expr const &a)
Chris@16 2099 {
Chris@16 2100 proto::expr<
Chris@16 2101 proto::tag::assign
Chris@16 2102 , list2<expr &, expr const &>
Chris@16 2103 , 2
Chris@16 2104 > that = {*this, a};
Chris@16 2105 return that;
Chris@16 2106 }
Chris@16 2107
Chris@16 2108
Chris@16 2109
Chris@16 2110
Chris@16 2111 template<typename A>
Chris@16 2112 BOOST_FORCEINLINE
Chris@16 2113 proto::expr<
Chris@16 2114 proto::tag::assign
Chris@16 2115 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 2116 , 2
Chris@16 2117 > const
Chris@16 2118 operator =(A &a) const
Chris@16 2119 {
Chris@16 2120 proto::expr<
Chris@16 2121 proto::tag::assign
Chris@16 2122 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 2123 , 2
Chris@16 2124 > that = {*this, proto::as_child(a)};
Chris@16 2125 return that;
Chris@16 2126 }
Chris@16 2127
Chris@16 2128
Chris@16 2129 template<typename A>
Chris@16 2130 BOOST_FORCEINLINE
Chris@16 2131 proto::expr<
Chris@16 2132 proto::tag::assign
Chris@16 2133 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 2134 , 2
Chris@16 2135 > const
Chris@16 2136 operator =(A const &a) const
Chris@16 2137 {
Chris@16 2138 proto::expr<
Chris@16 2139 proto::tag::assign
Chris@16 2140 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 2141 , 2
Chris@16 2142 > that = {*this, proto::as_child(a)};
Chris@16 2143 return that;
Chris@16 2144 }
Chris@16 2145
Chris@16 2146
Chris@16 2147
Chris@16 2148
Chris@16 2149 template<typename A>
Chris@16 2150 BOOST_FORCEINLINE
Chris@16 2151 proto::expr<
Chris@16 2152 proto::tag::subscript
Chris@16 2153 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 2154 , 2
Chris@16 2155 > const
Chris@16 2156 operator [](A &a) const
Chris@16 2157 {
Chris@16 2158 proto::expr<
Chris@16 2159 proto::tag::subscript
Chris@16 2160 , list2<expr const &, typename result_of::as_child<A>::type>
Chris@16 2161 , 2
Chris@16 2162 > that = {*this, proto::as_child(a)};
Chris@16 2163 return that;
Chris@16 2164 }
Chris@16 2165
Chris@16 2166
Chris@16 2167 template<typename A>
Chris@16 2168 BOOST_FORCEINLINE
Chris@16 2169 proto::expr<
Chris@16 2170 proto::tag::subscript
Chris@16 2171 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 2172 , 2
Chris@16 2173 > const
Chris@16 2174 operator [](A const &a) const
Chris@16 2175 {
Chris@16 2176 proto::expr<
Chris@16 2177 proto::tag::subscript
Chris@16 2178 , list2<expr const &, typename result_of::as_child<A const>::type>
Chris@16 2179 , 2
Chris@16 2180 > that = {*this, proto::as_child(a)};
Chris@16 2181 return that;
Chris@16 2182 }
Chris@16 2183
Chris@16 2184
Chris@16 2185 template<typename Sig>
Chris@16 2186 struct result
Chris@16 2187 {
Chris@16 2188 typedef typename result_of::funop<Sig, expr, default_domain>::type const type;
Chris@16 2189 };
Chris@16 2190
Chris@16 2191
Chris@16 2192 template<typename ...A>
Chris@16 2193 BOOST_FORCEINLINE
Chris@16 2194 typename result_of::funop<
Chris@16 2195 expr const(A const &...)
Chris@16 2196 , expr
Chris@16 2197 , default_domain
Chris@16 2198 >::type const
Chris@16 2199 operator ()(A const &... a) const
Chris@16 2200 {
Chris@16 2201 return result_of::funop<
Chris@16 2202 expr const(A const &...)
Chris@16 2203 , expr
Chris@16 2204 , default_domain
Chris@16 2205 >::call(*this, a...);
Chris@16 2206 }
Chris@16 2207 };
Chris@16 2208