Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/boost/bind/bind_template.hpp @ 46

Last change on this file since 46 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 7.9 KB
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#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
42 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
43
44    template<class A1> result_type operator()(A1 const & a1)
45    {
46        list1<A1 const &> a(a1);
47        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
48    }
49
50    template<class A1> result_type operator()(A1 const & a1) const
51    {
52        list1<A1 const &> a(a1);
53        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
54    }
55
56#endif
57
58    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2)
59    {
60        list2<A1 &, A2 &> a(a1, a2);
61        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
62    }
63
64    template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const
65    {
66        list2<A1 &, A2 &> a(a1, a2);
67        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
68    }
69
70#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
71 && !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
72
73    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2)
74    {
75        list2<A1 const &, A2 &> a(a1, a2);
76        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
77    }
78
79    template<class A1, class A2> result_type operator()(A1 const & a1, A2 & a2) const
80    {
81        list2<A1 const &, A2 &> a(a1, a2);
82        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
83    }
84
85
86    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2)
87    {
88        list2<A1 &, A2 const &> a(a1, a2);
89        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
90    }
91
92    template<class A1, class A2> result_type operator()(A1 & a1, A2 const & a2) const
93    {
94        list2<A1 &, A2 const &> a(a1, a2);
95        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
96    }
97
98
99    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2)
100    {
101        list2<A1 const &, A2 const &> a(a1, a2);
102        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
103    }
104
105    template<class A1, class A2> result_type operator()(A1 const & a1, A2 const & a2) const
106    {
107        list2<A1 const &, A2 const &> a(a1, a2);
108        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
109    }
110
111#endif
112
113    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3)
114    {
115        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
116        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
117    }
118
119    template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const
120    {
121        list3<A1 &, A2 &, A3 &> a(a1, a2, a3);
122        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
123    }
124
125    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4)
126    {
127        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
128        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
129    }
130
131    template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const
132    {
133        list4<A1 &, A2 &, A3 &, A4 &> a(a1, a2, a3, a4);
134        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
135    }
136
137    template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5)
138    {
139        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
140        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
141    }
142
143    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
144    {
145        list5<A1 &, A2 &, A3 &, A4 &, A5 &> a(a1, a2, a3, a4, a5);
146        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
147    }
148
149    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)
150    {
151        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
152        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
153    }
154
155    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
156    {
157        list6<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &> a(a1, a2, a3, a4, a5, a6);
158        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
159    }
160
161    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)
162    {
163        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
164        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
165    }
166
167    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
168    {
169        list7<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &> a(a1, a2, a3, a4, a5, a6, a7);
170        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
171    }
172
173    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)
174    {
175        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
176        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
177    }
178
179    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
180    {
181        list8<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &> a(a1, a2, a3, a4, a5, a6, a7, a8);
182        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
183    }
184
185    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)
186    {
187        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
188        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
189    }
190
191    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
192    {
193        list9<A1 &, A2 &, A3 &, A4 &, A5 &, A6 &, A7 &, A8 &, A9 &> a(a1, a2, a3, a4, a5, a6, a7, a8, a9);
194        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
195    }
196
197    template<class A> result_type eval(A & a)
198    {
199        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
200    }
201
202    template<class A> result_type eval(A & a) const
203    {
204        BOOST_BIND_RETURN l_(type<result_type>(), f_, a, 0);
205    }
206
207    template<class V> void accept(V & v) const
208    {
209#if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ )
210
211        using boost::visit_each;
212
213#endif
214        BOOST_BIND_VISIT_EACH(v, f_, 0);
215        l_.accept(v);
216    }
217
218    bool compare(this_type const & rhs) const
219    {
220        return ref_compare(f_, rhs.f_, 0) && l_ == rhs.l_;
221    }
222
223private:
224
225    F f_;
226    L l_;
Note: See TracBrowser for help on using the repository browser.