src/sysc/packages/boost/bind.hpp

Go to the documentation of this file.
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 //  bind.hpp - binds function objects to arguments
00010 //
00011 //  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
00012 //  Copyright (c) 2001 David Abrahams
00013 //
00014 //  Permission to copy, use, modify, sell and distribute this software
00015 //  is granted provided this copyright notice appears in all copies.
00016 //  This software is provided "as is" without express or implied
00017 //  warranty, and with no claim as to its suitability for any purpose.
00018 //
00019 //  See http://www.boost.org/libs/bind/bind.html for documentation.
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 // Borland-specific bug, visit_each() silently fails to produce code
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 // implementation details
00044 {
00045 
00046 // result_traits
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 // bind_t forward declaration for listN
00070 
00071 template<class R, class F, class L> class bind_t;
00072 
00073 // value
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 // type
00090 
00091 template<class T> class type {};
00092 
00093 // unwrap
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 // listN
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 // bind_t
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 // add_value
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 // list_av_N
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 } // namespace _bi
01137 
01138 // visit_each
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 // bind
01151 
01152 #ifndef BOOST_BIND
01153 #define BOOST_BIND bind
01154 #endif
01155 
01156 // generic function objects
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 // adaptable function objects
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 // function pointers
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 // member function pointers
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 // data member pointers
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 } // namespace boost
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

Generated on Wed Apr 25 13:53:27 2007 for SystemC by  doxygen 1.5.1