bind_template.hpp

Go to the documentation of this file.
00001 //
00002 //  bind/bind_template.hpp
00003 //
00004 //  Do not include this header directly.
00005 //
00006 //  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
00007 //
00008 // Distributed under the Boost Software License, Version 1.0. (See
00009 // accompanying file LICENSE_1_0.txt or copy at
00010 // http://www.boost.org/LICENSE_1_0.txt)
00011 //
00012 //  See http://www.boost.org/libs/bind/bind.html for documentation.
00013 //
00014 
00015     typedef typename result_traits<R, F>::type result_type;
00016 
00017     result_type operator()()
00018     {
00019         list0 a;
00020         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00021     }
00022 
00023     result_type operator()() const
00024     {
00025         list0 a;
00026         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00027     }
00028 
00029     template<class A1> result_type operator()(A1 & a1)
00030     {
00031         list1<A1 &> a(a1);
00032         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00033     }
00034 
00035     template<class A1> result_type operator()(A1 & a1) const
00036     {
00037         list1<A1 &> a(a1);
00038         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00039     }
00040 
00041     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
00042     {
00043         list2<A1 &, A2 &> a(a1, a2);
00044         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00045     }
00046 
00047     template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
00048     {
00049         list2<A1 &, A2 &> a(a1, a2);
00050         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00051     }
00052 
00053     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
00054     {
00055         list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
00056         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00057     }
00058 
00059     template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
00060     {
00061         list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
00062         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00063     }
00064 
00065     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
00066     {
00067         list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
00068         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00069     }
00070 
00071     template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
00072     {
00073         list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
00074         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00075     }
00076 
00077     template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
00078     {
00079         list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
00080         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00081     }
00082 
00083     template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) const
00084     {
00085         list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
00086         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00087     }
00088 
00089     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6)
00090     {
00091         list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
00092         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00093     }
00094 
00095     template<class A1, class A2, class A3, class A4, class A5, class A6> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6) const
00096     {
00097         list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
00098         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00099     }
00100 
00101     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7)
00102     {
00103         list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
00104         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00105     }
00106 
00107     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7) const
00108     {
00109         list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
00110         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00111     }
00112 
00113     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8)
00114     {
00115         list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
00116         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00117     }
00118 
00119     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8) const
00120     {
00121         list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
00122         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00123     }
00124 
00125     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9)
00126     {
00127         list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00128         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00129     }
00130 
00131     template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5, A6 & a6, A7 & a7, A8 & a8, A9 & a9) const
00132     {
00133         list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
00134         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00135     }
00136 
00137     template<class A> result_type eval(A & a)
00138     {
00139         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00140     }
00141 
00142     template<class A> result_type eval(A & a) const
00143     {
00144         BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
00145     }
00146 
00147     template<class V> void accept(V & v) const
00148     {
00149         BOOST_BIND_VISIT_EACH(v, f_, 0);
00150         l_.accept(v);
00151     }
00152 
00153     bool compare(this_type const & rhs) const
00154     {
00155         return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;
00156     }
00157 
00158 private:
00159 
00160     F f_;
00161     L l_;

Generated on Wed Jan 21 15:32:09 2009 for SystemC by  doxygen 1.5.5