source: NonGTP/Boost/boost/bind/bind_template.hpp @ 857

Revision 857, 6.2 KB checked in by igarcia, 18 years ago (diff)
Line 
1//
2//  bind/bind_template.hpp
3//
4//  Do not include this header directly.
5//
6//  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
7//
8// Distributed under the Boost Software License, Version 1.0. (See
9// accompanying file LICENSE_1_0.txt or copy at
10// http://www.boost.org/LICENSE_1_0.txt)
11//
12//  See http://www.boost.org/libs/bind/bind.html for documentation.
13//
14
15    typedef typename result_traits<R, F>::type result_type;
16
17    result_type operator()()
18    {
19        list0 a;
20        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
21    }
22
23    result_type operator()() const
24    {
25        list0 a;
26        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
27    }
28
29    template<class A1> result_type operator()(A1 & a1)
30    {
31        list1<A1 &> a(a1);
32        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
33    }
34
35    template<class A1> result_type operator()(A1 & a1) const
36    {
37        list1<A1 &> a(a1);
38        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
39    }
40
41    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
42    {
43        list2<A1 &, A2 &> a(a1, a2);
44        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
45    }
46
47    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
48    {
49        list2<A1 &, A2 &> a(a1, a2);
50        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
51    }
52
53    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
54    {
55        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
56        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
57    }
58
59    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
60    {
61        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
62        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
63    }
64
65    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
66    {
67        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
68        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
69    }
70
71    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
72    {
73        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
74        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
75    }
76
77    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
78    {
79        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
80        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
81    }
82
83    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
84    {
85        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
86        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
87    }
88
89    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)
90    {
91        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
92        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
93    }
94
95    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
96    {
97        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
98        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
99    }
100
101    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)
102    {
103        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
104        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
105    }
106
107    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
108    {
109        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
110        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
111    }
112
113    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)
114    {
115        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
116        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
117    }
118
119    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
120    {
121        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
122        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
123    }
124
125    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)
126    {
127        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
128        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
129    }
130
131    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
132    {
133        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
134        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
135    }
136
137    template<class A> result_type eval(A & a)
138    {
139        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
140    }
141
142    template<class A> result_type eval(A & a) const
143    {
144        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
145    }
146
147    template<class V> void accept(V & v) const
148    {
149        BOOST_BIND_VISIT_EACH(v, f_, 0);
150        l_.accept(v);
151    }
152
153    bool compare(this_type const & rhs) const
154    {
155        return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;
156    }
157
158private:
159
160    F f_;
161    L l_;
Note: See TracBrowser for help on using the repository browser.