00001 #ifndef BOOST_BIND_HPP_INCLUDED
00002 #define BOOST_BIND_HPP_INCLUDED
00003
00004 #if _MSC_VER >= 1020
00005 #pragma once
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <sysc/packages/boost/config.hpp>
00023 #include <sysc/packages/boost/ref.hpp>
00024 #include <sysc/packages/boost/mem_fn.hpp>
00025 #include <sysc/packages/boost/bind/arg.hpp>
00026
00027
00028
00029 #if defined(__BORLANDC__)
00030 # define BOOST_BIND_VISIT_EACH boost::visit_each
00031 #else
00032 # define BOOST_BIND_VISIT_EACH visit_each
00033 #endif
00034
00035 #ifdef BOOST_MSVC
00036 # pragma warning(push)
00037 # pragma warning(disable: 4512) // assignment operator could not be generated
00038 #endif
00039
00040 namespace boost
00041 {
00042
00043 namespace _bi
00044 {
00045
00046
00047
00048 template<class R, class F> struct result_traits
00049 {
00050 typedef R type;
00051 };
00052
00053 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
00054
00055 struct unspecified {};
00056
00057 template<class F> struct result_traits<unspecified, F>
00058 {
00059 typedef typename F::result_type type;
00060 };
00061
00062 template<class F> struct result_traits< unspecified, reference_wrapper<F> >
00063 {
00064 typedef typename F::result_type type;
00065 };
00066
00067 #endif
00068
00069
00070
00071 template<class R, class F, class L> class bind_t;
00072
00073
00074
00075 template<class T> class value
00076 {
00077 public:
00078
00079 value(T const & t): t_(t) {}
00080
00081 T & get() { return t_; }
00082 T const & get() const { return t_; }
00083
00084 private:
00085
00086 T t_;
00087 };
00088
00089
00090
00091 template<class T> class type {};
00092
00093
00094
00095 template<class F> inline F & unwrap(F & f, long)
00096 {
00097 return f;
00098 }
00099
00100 template<class F> inline F & unwrap(reference_wrapper<F> & f, int)
00101 {
00102 return f;
00103 }
00104
00105 template<class F> inline F & unwrap(reference_wrapper<F> const & f, int)
00106 {
00107 return f;
00108 }
00109
00110
00111
00112 #ifdef BOOST_NO_VOID_RETURNS
00113
00114 template <class R> struct evaluator0;
00115 template <class R> struct evaluator1;
00116 template <class R> struct evaluator2;
00117 template <class R> struct evaluator3;
00118 template <class R> struct evaluator4;
00119 template <class R> struct evaluator5;
00120 template <class R> struct evaluator6;
00121 template <class R> struct evaluator7;
00122 template <class R> struct evaluator8;
00123 template <class R> struct evaluator9;
00124
00125 #endif
00126
00127 class list0
00128 {
00129 public:
00130
00131 list0() {}
00132
00133 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00134
00135 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00136
00137 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00138
00139 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00140
00141 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00142
00143 template<class R, class F, class A> R operator()(type<R>, F f, A &) const
00144 {
00145 return unwrap(f, 0)();
00146 }
00147
00148 template<class V> void accept(V &) const
00149 {
00150 }
00151
00152 #ifdef BOOST_NO_VOID_RETURNS
00153
00154 template<class R> struct evaluator
00155 {
00156 typedef evaluator0<R> type;
00157 };
00158
00159 #endif
00160
00161 };
00162
00163 template<class A1> class list1
00164 {
00165 public:
00166
00167 explicit list1(A1 a1): a1_(a1) {}
00168
00169 A1 operator[] (boost::arg<1>) const { return a1_; }
00170
00171 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00172
00173 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00174
00175 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00176
00177 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00178
00179 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00180
00181 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00182
00183 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00184 {
00185 return unwrap(f, 0)(a[a1_]);
00186 }
00187
00188 template<class V> void accept(V & v) const
00189 {
00190 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00191 }
00192
00193 #ifdef BOOST_NO_VOID_RETURNS
00194
00195 template<class R> struct evaluator
00196 {
00197 typedef evaluator1<R> type;
00198 };
00199
00200 #else
00201
00202 private:
00203
00204 #endif
00205
00206 A1 a1_;
00207 };
00208
00209 template<class A1, class A2> class list2
00210 {
00211 public:
00212
00213 list2(A1 a1, A2 a2): a1_(a1), a2_(a2) {}
00214
00215 A1 operator[] (boost::arg<1>) const { return a1_; }
00216 A2 operator[] (boost::arg<2>) const { return a2_; }
00217
00218 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00219 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00220
00221 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00222
00223 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00224
00225 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00226
00227 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00228
00229 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00230
00231 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00232 {
00233 return unwrap(f, 0)(a[a1_], a[a2_]);
00234 }
00235
00236 template<class V> void accept(V & v) const
00237 {
00238 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00239 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00240 }
00241
00242 #ifdef BOOST_NO_VOID_RETURNS
00243
00244 template<class R> struct evaluator
00245 {
00246 typedef evaluator2<R> type;
00247 };
00248
00249 #else
00250
00251 private:
00252
00253 #endif
00254
00255 A1 a1_;
00256 A2 a2_;
00257 };
00258
00259 template<class A1, class A2, class A3> class list3
00260 {
00261 public:
00262
00263 list3(A1 a1, A2 a2, A3 a3): a1_(a1), a2_(a2), a3_(a3) {}
00264
00265 A1 operator[] (boost::arg<1>) const { return a1_; }
00266 A2 operator[] (boost::arg<2>) const { return a2_; }
00267 A3 operator[] (boost::arg<3>) const { return a3_; }
00268
00269 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00270 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00271 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00272
00273 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00274
00275 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00276
00277 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00278
00279 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00280
00281 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00282
00283 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00284 {
00285 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_]);
00286 }
00287
00288 template<class V> void accept(V & v) const
00289 {
00290 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00291 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00292 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00293 }
00294
00295 #ifdef BOOST_NO_VOID_RETURNS
00296
00297 template<class R> struct evaluator
00298 {
00299 typedef evaluator3<R> type;
00300 };
00301
00302 #else
00303
00304 private:
00305
00306 #endif
00307
00308 A1 a1_;
00309 A2 a2_;
00310 A3 a3_;
00311 };
00312
00313 template<class A1, class A2, class A3, class A4> class list4
00314 {
00315 public:
00316
00317 list4(A1 a1, A2 a2, A3 a3, A4 a4): a1_(a1), a2_(a2), a3_(a3), a4_(a4) {}
00318
00319 A1 operator[] (boost::arg<1>) const { return a1_; }
00320 A2 operator[] (boost::arg<2>) const { return a2_; }
00321 A3 operator[] (boost::arg<3>) const { return a3_; }
00322 A4 operator[] (boost::arg<4>) const { return a4_; }
00323
00324 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00325 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00326 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00327 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00328
00329 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00330
00331 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00332
00333 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00334
00335 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00336
00337 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00338
00339 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00340 {
00341 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]);
00342 }
00343
00344 template<class V> void accept(V & v) const
00345 {
00346 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00347 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00348 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00349 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00350 }
00351
00352 #ifdef BOOST_NO_VOID_RETURNS
00353
00354 template<class R> struct evaluator
00355 {
00356 typedef evaluator4<R> type;
00357 };
00358
00359 #else
00360
00361 private:
00362
00363 #endif
00364
00365 A1 a1_;
00366 A2 a2_;
00367 A3 a3_;
00368 A4 a4_;
00369 };
00370
00371 template<class A1, class A2, class A3, class A4, class A5> class list5
00372 {
00373 public:
00374
00375 list5(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5) {}
00376
00377 A1 operator[] (boost::arg<1>) const { return a1_; }
00378 A2 operator[] (boost::arg<2>) const { return a2_; }
00379 A3 operator[] (boost::arg<3>) const { return a3_; }
00380 A4 operator[] (boost::arg<4>) const { return a4_; }
00381 A5 operator[] (boost::arg<5>) const { return a5_; }
00382
00383 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00384 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00385 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00386 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00387 A5 operator[] (boost::arg<5> (*) ()) const { return a5_; }
00388
00389 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00390
00391 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00392
00393 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00394
00395 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00396
00397 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00398
00399 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00400 {
00401 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_]);
00402 }
00403
00404 template<class V> void accept(V & v) const
00405 {
00406 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00407 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00408 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00409 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00410 BOOST_BIND_VISIT_EACH(v, a5_, 0);
00411 }
00412
00413 #ifdef BOOST_NO_VOID_RETURNS
00414
00415 template<class R> struct evaluator
00416 {
00417 typedef evaluator5<R> type;
00418 };
00419
00420 #else
00421
00422 private:
00423
00424 #endif
00425
00426 A1 a1_;
00427 A2 a2_;
00428 A3 a3_;
00429 A4 a4_;
00430 A5 a5_;
00431 };
00432
00433 template<class A1, class A2, class A3, class A4, class A5, class A6> class list6
00434 {
00435 public:
00436
00437 list6(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6) {}
00438
00439 A1 operator[] (boost::arg<1>) const { return a1_; }
00440 A2 operator[] (boost::arg<2>) const { return a2_; }
00441 A3 operator[] (boost::arg<3>) const { return a3_; }
00442 A4 operator[] (boost::arg<4>) const { return a4_; }
00443 A5 operator[] (boost::arg<5>) const { return a5_; }
00444 A6 operator[] (boost::arg<6>) const { return a6_; }
00445
00446 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00447 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00448 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00449 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00450 A5 operator[] (boost::arg<5> (*) ()) const { return a5_; }
00451 A6 operator[] (boost::arg<6> (*) ()) const { return a6_; }
00452
00453 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00454
00455 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00456
00457 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00458
00459 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00460
00461 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00462
00463 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00464 {
00465 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_]);
00466 }
00467
00468 template<class V> void accept(V & v) const
00469 {
00470 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00471 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00472 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00473 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00474 BOOST_BIND_VISIT_EACH(v, a5_, 0);
00475 BOOST_BIND_VISIT_EACH(v, a6_, 0);
00476 }
00477
00478 #ifdef BOOST_NO_VOID_RETURNS
00479
00480 template<class R> struct evaluator
00481 {
00482 typedef evaluator6<R> type;
00483 };
00484
00485 #else
00486
00487 private:
00488
00489 #endif
00490
00491 A1 a1_;
00492 A2 a2_;
00493 A3 a3_;
00494 A4 a4_;
00495 A5 a5_;
00496 A6 a6_;
00497 };
00498
00499 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7
00500 {
00501 public:
00502
00503 list7(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7) {}
00504
00505 A1 operator[] (boost::arg<1>) const { return a1_; }
00506 A2 operator[] (boost::arg<2>) const { return a2_; }
00507 A3 operator[] (boost::arg<3>) const { return a3_; }
00508 A4 operator[] (boost::arg<4>) const { return a4_; }
00509 A5 operator[] (boost::arg<5>) const { return a5_; }
00510 A6 operator[] (boost::arg<6>) const { return a6_; }
00511 A7 operator[] (boost::arg<7>) const { return a7_; }
00512
00513 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00514 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00515 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00516 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00517 A5 operator[] (boost::arg<5> (*) ()) const { return a5_; }
00518 A6 operator[] (boost::arg<6> (*) ()) const { return a6_; }
00519 A7 operator[] (boost::arg<7> (*) ()) const { return a7_; }
00520
00521 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00522
00523 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00524
00525 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00526
00527 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00528
00529 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00530
00531 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00532 {
00533 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_]);
00534 }
00535
00536 template<class V> void accept(V & v) const
00537 {
00538 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00539 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00540 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00541 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00542 BOOST_BIND_VISIT_EACH(v, a5_, 0);
00543 BOOST_BIND_VISIT_EACH(v, a6_, 0);
00544 BOOST_BIND_VISIT_EACH(v, a7_, 0);
00545 }
00546
00547 #ifdef BOOST_NO_VOID_RETURNS
00548
00549 template<class R> struct evaluator
00550 {
00551 typedef evaluator7<R> type;
00552 };
00553
00554 #else
00555
00556 private:
00557
00558 #endif
00559
00560 A1 a1_;
00561 A2 a2_;
00562 A3 a3_;
00563 A4 a4_;
00564 A5 a5_;
00565 A6 a6_;
00566 A7 a7_;
00567 };
00568
00569 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> class list8
00570 {
00571 public:
00572
00573 list8(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8) {}
00574
00575 A1 operator[] (boost::arg<1>) const { return a1_; }
00576 A2 operator[] (boost::arg<2>) const { return a2_; }
00577 A3 operator[] (boost::arg<3>) const { return a3_; }
00578 A4 operator[] (boost::arg<4>) const { return a4_; }
00579 A5 operator[] (boost::arg<5>) const { return a5_; }
00580 A6 operator[] (boost::arg<6>) const { return a6_; }
00581 A7 operator[] (boost::arg<7>) const { return a7_; }
00582 A8 operator[] (boost::arg<8>) const { return a8_; }
00583
00584 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00585 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00586 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00587 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00588 A5 operator[] (boost::arg<5> (*) ()) const { return a5_; }
00589 A6 operator[] (boost::arg<6> (*) ()) const { return a6_; }
00590 A7 operator[] (boost::arg<7> (*) ()) const { return a7_; }
00591 A8 operator[] (boost::arg<8> (*) ()) const { return a8_; }
00592
00593 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00594
00595 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00596
00597 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00598
00599 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00600
00601 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00602
00603 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00604 {
00605 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_]);
00606 }
00607
00608 template<class V> void accept(V & v) const
00609 {
00610 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00611 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00612 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00613 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00614 BOOST_BIND_VISIT_EACH(v, a5_, 0);
00615 BOOST_BIND_VISIT_EACH(v, a6_, 0);
00616 BOOST_BIND_VISIT_EACH(v, a7_, 0);
00617 BOOST_BIND_VISIT_EACH(v, a8_, 0);
00618 }
00619
00620 #ifdef BOOST_NO_VOID_RETURNS
00621
00622 template<class R> struct evaluator
00623 {
00624 typedef evaluator8<R> type;
00625 };
00626
00627 #else
00628
00629 private:
00630
00631 #endif
00632
00633 A1 a1_;
00634 A2 a2_;
00635 A3 a3_;
00636 A4 a4_;
00637 A5 a5_;
00638 A6 a6_;
00639 A7 a7_;
00640 A8 a8_;
00641 };
00642
00643 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9
00644 {
00645 public:
00646
00647 list9(A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9): a1_(a1), a2_(a2), a3_(a3), a4_(a4), a5_(a5), a6_(a6), a7_(a7), a8_(a8), a9_(a9) {}
00648
00649 A1 operator[] (boost::arg<1>) const { return a1_; }
00650 A2 operator[] (boost::arg<2>) const { return a2_; }
00651 A3 operator[] (boost::arg<3>) const { return a3_; }
00652 A4 operator[] (boost::arg<4>) const { return a4_; }
00653 A5 operator[] (boost::arg<5>) const { return a5_; }
00654 A6 operator[] (boost::arg<6>) const { return a6_; }
00655 A7 operator[] (boost::arg<7>) const { return a7_; }
00656 A8 operator[] (boost::arg<8>) const { return a8_; }
00657 A9 operator[] (boost::arg<9>) const { return a9_; }
00658
00659 A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }
00660 A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }
00661 A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }
00662 A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }
00663 A5 operator[] (boost::arg<5> (*) ()) const { return a5_; }
00664 A6 operator[] (boost::arg<6> (*) ()) const { return a6_; }
00665 A7 operator[] (boost::arg<7> (*) ()) const { return a7_; }
00666 A8 operator[] (boost::arg<8> (*) ()) const { return a8_; }
00667 A9 operator[] (boost::arg<9> (*) ()) const { return a9_; }
00668
00669 template<class T> T & operator[] (value<T> & v) const { return v.get(); }
00670
00671 template<class T> T const & operator[] (value<T> const & v) const { return v.get(); }
00672
00673 template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
00674
00675 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
00676
00677 template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
00678
00679 template<class R, class F, class A> R operator()(type<R>, F f, A & a) const
00680 {
00681 return unwrap(f, 0)(a[a1_], a[a2_], a[a3_], a[a4_], a[a5_], a[a6_], a[a7_], a[a8_], a[a9_]);
00682 }
00683
00684 template<class V> void accept(V & v) const
00685 {
00686 BOOST_BIND_VISIT_EACH(v, a1_, 0);
00687 BOOST_BIND_VISIT_EACH(v, a2_, 0);
00688 BOOST_BIND_VISIT_EACH(v, a3_, 0);
00689 BOOST_BIND_VISIT_EACH(v, a4_, 0);
00690 BOOST_BIND_VISIT_EACH(v, a5_, 0);
00691 BOOST_BIND_VISIT_EACH(v, a6_, 0);
00692 BOOST_BIND_VISIT_EACH(v, a7_, 0);
00693 BOOST_BIND_VISIT_EACH(v, a8_, 0);
00694 BOOST_BIND_VISIT_EACH(v, a9_, 0);
00695 }
00696
00697 #ifdef BOOST_NO_VOID_RETURNS
00698
00699 template<class R> struct evaluator
00700 {
00701 typedef evaluator9<R> type;
00702 };
00703
00704 #else
00705
00706 private:
00707
00708 #endif
00709
00710 A1 a1_;
00711 A2 a2_;
00712 A3 a3_;
00713 A4 a4_;
00714 A5 a5_;
00715 A6 a6_;
00716 A7 a7_;
00717 A8 a8_;
00718 A9 a9_;
00719 };
00720
00721 #ifdef BOOST_NO_VOID_RETURNS
00722
00723 template <class R> struct evaluator0
00724 {
00725 template<class L, class F, class A>
00726 static R eval(L const&, F f, A &)
00727 {
00728 return unwrap(f, 0)();
00729 }
00730 };
00731
00732 template <> struct evaluator0<void>
00733 {
00734 template<class L, class F, class A>
00735 static void eval(L const&, F f, A &)
00736 {
00737 unwrap(f, 0)();
00738 }
00739 };
00740
00741 template <class R> struct evaluator1
00742 {
00743 template<class L, class F, class A>
00744 static R eval(L const& l, F f, A & a)
00745 {
00746 return unwrap(f, 0)(a[l.a1_]);
00747 }
00748 };
00749
00750 template <> struct evaluator1<void>
00751 {
00752 template<class L, class F, class A>
00753 static void eval(L const& l, F f, A & a)
00754 {
00755 unwrap(f, 0)(a[l.a1_]);
00756 }
00757 };
00758
00759 template <class R> struct evaluator2
00760 {
00761 template<class L, class F, class A>
00762 static R eval(L const& l, F f, A & a)
00763 {
00764 return unwrap(f, 0)(a[l.a1_], a[l.a2_]);
00765 }
00766 };
00767
00768 template <> struct evaluator2<void>
00769 {
00770 template<class L, class F, class A>
00771 static void eval(L const& l, F f, A & a)
00772 {
00773 unwrap(f, 0)(a[l.a1_], a[l.a2_]);
00774 }
00775 };
00776
00777 template <class R> struct evaluator3
00778 {
00779 template<class L, class F, class A>
00780 static R eval(L const& l, F f, A & a)
00781 {
00782 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_]);
00783 }
00784 };
00785
00786 template <> struct evaluator3<void>
00787 {
00788 template<class L, class F, class A>
00789 static void eval(L const& l, F f, A & a)
00790 {
00791 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_]);
00792 }
00793 };
00794
00795 template <class R> struct evaluator4
00796 {
00797 template<class L, class F, class A>
00798 static R eval(L const& l, F f, A & a)
00799 {
00800 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_]);
00801 }
00802 };
00803
00804 template <> struct evaluator4<void>
00805 {
00806 template<class L, class F, class A>
00807 static void eval(L const& l, F f, A & a)
00808 {
00809 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_]);
00810 }
00811 };
00812
00813 template <class R> struct evaluator5
00814 {
00815 template<class L, class F, class A>
00816 static R eval(L const& l, F f, A & a)
00817 {
00818 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_]);
00819 }
00820 };
00821
00822 template <> struct evaluator5<void>
00823 {
00824 template<class L, class F, class A>
00825 static void eval(L const& l, F f, A & a)
00826 {
00827 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_]);
00828 }
00829 };
00830
00831 template <class R> struct evaluator6
00832 {
00833 template<class L, class F, class A>
00834 static R eval(L const& l, F f, A & a)
00835 {
00836 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_]);
00837 }
00838 };
00839
00840 template <> struct evaluator6<void>
00841 {
00842 template<class L, class F, class A>
00843 static void eval(L const& l, F f, A & a)
00844 {
00845 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_]);
00846 }
00847 };
00848
00849 template <class R> struct evaluator7
00850 {
00851 template<class L, class F, class A>
00852 static R eval(L const& l, F f, A & a)
00853 {
00854 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_]);
00855 }
00856 };
00857
00858 template <> struct evaluator7<void>
00859 {
00860 template<class L, class F, class A>
00861 static void eval(L const& l, F f, A & a)
00862 {
00863 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_]);
00864 }
00865 };
00866
00867 template <class R> struct evaluator8
00868 {
00869 template<class L, class F, class A>
00870 static R eval(L const& l, F f, A & a)
00871 {
00872 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_]);
00873 }
00874 };
00875
00876 template <> struct evaluator8<void>
00877 {
00878 template<class L, class F, class A>
00879 static void eval(L const& l, F f, A & a)
00880 {
00881 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_]);
00882 }
00883 };
00884
00885 template <class R> struct evaluator9
00886 {
00887 template<class L, class F, class A>
00888 static R eval(L const& l, F f, A & a)
00889 {
00890 return unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_], a[l.a9_]);
00891 }
00892 };
00893
00894 template <> struct evaluator9<void>
00895 {
00896 template<class L, class F, class A>
00897 static void eval(L const& l, F f, A & a)
00898 {
00899 unwrap(f, 0)(a[l.a1_], a[l.a2_], a[l.a3_], a[l.a4_], a[l.a5_], a[l.a6_], a[l.a7_], a[l.a8_], a[l.a9_]);
00900 }
00901 };
00902
00903 #endif
00904
00905
00906
00907 #ifndef BOOST_NO_VOID_RETURNS
00908
00909 template<class R, class F, class L> class bind_t
00910 {
00911 public:
00912
00913 bind_t(F f, L const & l): f_(f), l_(l) {}
00914
00915 #define BOOST_BIND_EVALUATE return l_(type<result_type>(), f_, a)
00916 #include <sysc/packages/boost/bind/bind_template.hpp>
00917 #undef BOOST_BIND_EVALUATE
00918
00919 };
00920
00921 #else
00922
00923 template<class R> struct bind_t_generator
00924 {
00925
00926 template<class F, class L> class implementation
00927 {
00928 public:
00929
00930 implementation(F f, L const & l): f_(f), l_(l) {}
00931
00932 #define BOOST_BIND_EVALUATE return L::BOOST_NESTED_TEMPLATE evaluator<result_type>::type::eval(l_, f_, a);
00933 #include <sysc/packages/boost/bind/bind_template.hpp>
00934 #undef BOOST_BIND_EVALUATE
00935
00936 };
00937
00938 };
00939
00940 template<> struct bind_t_generator<void>
00941 {
00942
00943 template<class F, class L> class implementation
00944 {
00945 private:
00946
00947 typedef void R;
00948
00949 public:
00950
00951 implementation(F f, L const & l): f_(f), l_(l) {}
00952
00953 #define BOOST_BIND_EVALUATE L::BOOST_NESTED_TEMPLATE evaluator<result_type>::type::eval(l_, f_, a);
00954 #include <sysc/packages/boost/bind/bind_template.hpp>
00955 #undef BOOST_BIND_EVALUATE
00956
00957 };
00958
00959 };
00960
00961 template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>
00962 {
00963 public:
00964
00965 bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}
00966
00967 };
00968
00969 #endif
00970
00971
00972
00973 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)
00974
00975 template<class T> struct add_value
00976 {
00977 typedef value<T> type;
00978 };
00979
00980 template<class T> struct add_value< value<T> >
00981 {
00982 typedef value<T> type;
00983 };
00984
00985 template<class T> struct add_value< reference_wrapper<T> >
00986 {
00987 typedef reference_wrapper<T> type;
00988 };
00989
00990 template<int I> struct add_value< arg<I> >
00991 {
00992 typedef boost::arg<I> type;
00993 };
00994
00995 template<int I> struct add_value< arg<I> (*) () >
00996 {
00997 typedef boost::arg<I> (*type) ();
00998 };
00999
01000 template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
01001 {
01002 typedef bind_t<R, F, L> type;
01003 };
01004
01005 #else
01006
01007 template<int I> struct _avt_0;
01008
01009 template<> struct _avt_0<1>
01010 {
01011 template<class T> struct inner
01012 {
01013 typedef T type;
01014 };
01015 };
01016
01017 template<> struct _avt_0<2>
01018 {
01019 template<class T> struct inner
01020 {
01021 typedef value<T> type;
01022 };
01023 };
01024
01025 typedef char (&_avt_r1) [1];
01026 typedef char (&_avt_r2) [2];
01027
01028 template<class T> _avt_r1 _avt_f(value<T>);
01029 template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
01030 template<int I> _avt_r1 _avt_f(arg<I>);
01031 template<int I> _avt_r1 _avt_f(arg<I> (*) ());
01032 template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
01033
01034 _avt_r2 _avt_f(...);
01035
01036 template<class T> struct add_value
01037 {
01038 static T t();
01039 typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;
01040 };
01041
01042 #endif
01043
01044
01045
01046 template<class A1> struct list_av_1
01047 {
01048 typedef typename add_value<A1>::type B1;
01049 typedef list1<B1> type;
01050 };
01051
01052 template<class A1, class A2> struct list_av_2
01053 {
01054 typedef typename add_value<A1>::type B1;
01055 typedef typename add_value<A2>::type B2;
01056 typedef list2<B1, B2> type;
01057 };
01058
01059 template<class A1, class A2, class A3> struct list_av_3
01060 {
01061 typedef typename add_value<A1>::type B1;
01062 typedef typename add_value<A2>::type B2;
01063 typedef typename add_value<A3>::type B3;
01064 typedef list3<B1, B2, B3> type;
01065 };
01066
01067 template<class A1, class A2, class A3, class A4> struct list_av_4
01068 {
01069 typedef typename add_value<A1>::type B1;
01070 typedef typename add_value<A2>::type B2;
01071 typedef typename add_value<A3>::type B3;
01072 typedef typename add_value<A4>::type B4;
01073 typedef list4<B1, B2, B3, B4> type;
01074 };
01075
01076 template<class A1, class A2, class A3, class A4, class A5> struct list_av_5
01077 {
01078 typedef typename add_value<A1>::type B1;
01079 typedef typename add_value<A2>::type B2;
01080 typedef typename add_value<A3>::type B3;
01081 typedef typename add_value<A4>::type B4;
01082 typedef typename add_value<A5>::type B5;
01083 typedef list5<B1, B2, B3, B4, B5> type;
01084 };
01085
01086 template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6
01087 {
01088 typedef typename add_value<A1>::type B1;
01089 typedef typename add_value<A2>::type B2;
01090 typedef typename add_value<A3>::type B3;
01091 typedef typename add_value<A4>::type B4;
01092 typedef typename add_value<A5>::type B5;
01093 typedef typename add_value<A6>::type B6;
01094 typedef list6<B1, B2, B3, B4, B5, B6> type;
01095 };
01096
01097 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7
01098 {
01099 typedef typename add_value<A1>::type B1;
01100 typedef typename add_value<A2>::type B2;
01101 typedef typename add_value<A3>::type B3;
01102 typedef typename add_value<A4>::type B4;
01103 typedef typename add_value<A5>::type B5;
01104 typedef typename add_value<A6>::type B6;
01105 typedef typename add_value<A7>::type B7;
01106 typedef list7<B1, B2, B3, B4, B5, B6, B7> type;
01107 };
01108
01109 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8
01110 {
01111 typedef typename add_value<A1>::type B1;
01112 typedef typename add_value<A2>::type B2;
01113 typedef typename add_value<A3>::type B3;
01114 typedef typename add_value<A4>::type B4;
01115 typedef typename add_value<A5>::type B5;
01116 typedef typename add_value<A6>::type B6;
01117 typedef typename add_value<A7>::type B7;
01118 typedef typename add_value<A8>::type B8;
01119 typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;
01120 };
01121
01122 template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9
01123 {
01124 typedef typename add_value<A1>::type B1;
01125 typedef typename add_value<A2>::type B2;
01126 typedef typename add_value<A3>::type B3;
01127 typedef typename add_value<A4>::type B4;
01128 typedef typename add_value<A5>::type B5;
01129 typedef typename add_value<A6>::type B6;
01130 typedef typename add_value<A7>::type B7;
01131 typedef typename add_value<A8>::type B8;
01132 typedef typename add_value<A9>::type B9;
01133 typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
01134 };
01135
01136 }
01137
01138
01139
01140 template<class V, class T> void visit_each(V & v, _bi::value<T> const & t, int)
01141 {
01142 BOOST_BIND_VISIT_EACH(v, t.get(), 0);
01143 }
01144
01145 template<class V, class R, class F, class L> void visit_each(V & v, _bi::bind_t<R, F, L> const & t, int)
01146 {
01147 t.accept(v);
01148 }
01149
01150
01151
01152 #ifndef BOOST_BIND
01153 #define BOOST_BIND bind
01154 #endif
01155
01156
01157
01158 template<class R, class F>
01159 _bi::bind_t<R, F, _bi::list0>
01160 BOOST_BIND(F f)
01161 {
01162 typedef _bi::list0 list_type;
01163 return _bi::bind_t<R, F, list_type> (f, list_type());
01164 }
01165
01166 template<class R, class F, class A1>
01167 _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
01168 BOOST_BIND(F f, A1 a1)
01169 {
01170 typedef typename _bi::list_av_1<A1>::type list_type;
01171 return _bi::bind_t<R, F, list_type> (f, list_type(a1));
01172 }
01173
01174 template<class R, class F, class A1, class A2>
01175 _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
01176 BOOST_BIND(F f, A1 a1, A2 a2)
01177 {
01178 typedef typename _bi::list_av_2<A1, A2>::type list_type;
01179 return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
01180 }
01181
01182 template<class R, class F, class A1, class A2, class A3>
01183 _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
01184 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
01185 {
01186 typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
01187 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
01188 }
01189
01190 template<class R, class F, class A1, class A2, class A3, class A4>
01191 _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
01192 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
01193 {
01194 typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
01195 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
01196 }
01197
01198 template<class R, class F, class A1, class A2, class A3, class A4, class A5>
01199 _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
01200 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
01201 {
01202 typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
01203 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
01204 }
01205
01206 template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
01207 _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
01208 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
01209 {
01210 typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
01211 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
01212 }
01213
01214 template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
01215 _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
01216 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
01217 {
01218 typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
01219 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
01220 }
01221
01222 template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
01223 _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
01224 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
01225 {
01226 typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
01227 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
01228 }
01229
01230 template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
01231 _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
01232 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
01233 {
01234 typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
01235 return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
01236 }
01237
01238 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
01239
01240
01241
01242 template<class F>
01243 _bi::bind_t<_bi::unspecified, F, _bi::list0>
01244 BOOST_BIND(F f)
01245 {
01246 typedef _bi::list0 list_type;
01247 return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());
01248 }
01249
01250 template<class F, class A1>
01251 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>
01252 BOOST_BIND(F f, A1 a1)
01253 {
01254 typedef typename _bi::list_av_1<A1>::type list_type;
01255 return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));
01256 }
01257
01258 template<class F, class A1, class A2>
01259 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>
01260 BOOST_BIND(F f, A1 a1, A2 a2)
01261 {
01262 typedef typename _bi::list_av_2<A1, A2>::type list_type;
01263 return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));
01264 }
01265
01266 template<class F, class A1, class A2, class A3>
01267 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>
01268 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
01269 {
01270 typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
01271 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));
01272 }
01273
01274 template<class F, class A1, class A2, class A3, class A4>
01275 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
01276 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
01277 {
01278 typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
01279 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));
01280 }
01281
01282 template<class F, class A1, class A2, class A3, class A4, class A5>
01283 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
01284 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
01285 {
01286 typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
01287 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
01288 }
01289
01290 template<class F, class A1, class A2, class A3, class A4, class A5, class A6>
01291 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
01292 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
01293 {
01294 typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
01295 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
01296 }
01297
01298 template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
01299 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
01300 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
01301 {
01302 typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
01303 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
01304 }
01305
01306 template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
01307 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
01308 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
01309 {
01310 typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
01311 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
01312 }
01313
01314 template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
01315 _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
01316 BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
01317 {
01318 typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
01319 return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
01320 }
01321
01322 #endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
01323
01324
01325
01326 #define BOOST_BIND_CC
01327 #define BOOST_BIND_ST
01328
01329 #include <sysc/packages/boost/bind/bind_cc.hpp>
01330
01331 #undef BOOST_BIND_CC
01332 #undef BOOST_BIND_ST
01333
01334 #ifdef BOOST_BIND_ENABLE_STDCALL
01335
01336 #define BOOST_BIND_CC __stdcall
01337 #define BOOST_BIND_ST
01338
01339 #include <sysc/packages/boost/bind/bind_cc.hpp>
01340
01341 #undef BOOST_BIND_CC
01342 #undef BOOST_BIND_ST
01343
01344 #endif
01345
01346 #ifdef BOOST_BIND_ENABLE_FASTCALL
01347
01348 #define BOOST_BIND_CC __fastcall
01349 #define BOOST_BIND_ST
01350
01351 #include <sysc/packages/boost/bind/bind_cc.hpp>
01352
01353 #undef BOOST_BIND_CC
01354 #undef BOOST_BIND_ST
01355
01356 #endif
01357
01358 #ifdef BOOST_BIND_ENABLE_PASCAL
01359
01360 #define BOOST_BIND_ST pascal
01361 #define BOOST_BIND_CC
01362
01363 #include <sysc/packages/boost/bind/bind_cc.hpp>
01364
01365 #undef BOOST_BIND_ST
01366 #undef BOOST_BIND_CC
01367
01368 #endif
01369
01370
01371
01372 #define BOOST_BIND_MF_NAME(X) X
01373 #define BOOST_BIND_MF_CC
01374
01375 #include <sysc/packages/boost/bind/bind_mf_cc.hpp>
01376
01377 #undef BOOST_BIND_MF_NAME
01378 #undef BOOST_BIND_MF_CC
01379
01380 #ifdef BOOST_MEM_FN_ENABLE_STDCALL
01381
01382 #define BOOST_BIND_MF_NAME(X) X##_stdcall
01383 #define BOOST_BIND_MF_CC __stdcall
01384
01385 #include <sysc/packages/boost/bind/bind_mf_cc.hpp>
01386
01387 #undef BOOST_BIND_MF_NAME
01388 #undef BOOST_BIND_MF_CC
01389
01390 #endif
01391
01392 #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
01393
01394 #define BOOST_BIND_MF_NAME(X) X##_fastcall
01395 #define BOOST_BIND_MF_CC __fastcall
01396
01397 #include <sysc/packages/boost/bind/bind_mf_cc.hpp>
01398
01399 #undef BOOST_BIND_MF_NAME
01400 #undef BOOST_BIND_MF_CC
01401
01402 #endif
01403
01404
01405
01406 template<class R, class T, class A1>
01407 _bi::bind_t< R const &, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
01408 BOOST_BIND(R T::*f, A1 a1)
01409 {
01410 typedef _mfi::dm<R, T> F;
01411 typedef typename _bi::list_av_1<A1>::type list_type;
01412 return _bi::bind_t<R const &, F, list_type>(F(f), list_type(a1));
01413 }
01414
01415 }
01416
01417 #ifndef BOOST_BIND_NO_PLACEHOLDERS
01418
01419 # include <sysc/packages/boost/bind/placeholders.hpp>
01420
01421 #endif
01422
01423 #ifdef BOOST_MSVC
01424 # pragma warning(default: 4512) // assignment operator could not be generated
01425 # pragma warning(pop)
01426 #endif
01427
01428 #endif // #ifndef BOOST_BIND_HPP_INCLUDED