Chris@16
|
1 //
|
Chris@16
|
2 // bind/bind_mf_cc.hpp - support for different calling conventions
|
Chris@16
|
3 //
|
Chris@16
|
4 // Do not include this header directly.
|
Chris@16
|
5 //
|
Chris@16
|
6 // Copyright (c) 2001 Peter Dimov and Multi Media Ltd.
|
Chris@16
|
7 //
|
Chris@16
|
8 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
9 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
10 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
11 //
|
Chris@16
|
12 // See http://www.boost.org/libs/bind/bind.html for documentation.
|
Chris@16
|
13 //
|
Chris@16
|
14
|
Chris@16
|
15 // 0
|
Chris@16
|
16
|
Chris@16
|
17 template<class R, class T,
|
Chris@16
|
18 class A1>
|
Chris@16
|
19 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf0)<R, T>, typename _bi::list_av_1<A1>::type>
|
Chris@16
|
20 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1)
|
Chris@16
|
21 {
|
Chris@16
|
22 typedef _mfi::BOOST_BIND_MF_NAME(mf0)<R, T> F;
|
Chris@16
|
23 typedef typename _bi::list_av_1<A1>::type list_type;
|
Chris@16
|
24 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
|
Chris@16
|
25 }
|
Chris@16
|
26
|
Chris@16
|
27 template<class R, class T,
|
Chris@16
|
28 class A1>
|
Chris@16
|
29 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T>, typename _bi::list_av_1<A1>::type>
|
Chris@16
|
30 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1)
|
Chris@16
|
31 {
|
Chris@16
|
32 typedef _mfi::BOOST_BIND_MF_NAME(cmf0)<R, T> F;
|
Chris@16
|
33 typedef typename _bi::list_av_1<A1>::type list_type;
|
Chris@16
|
34 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1));
|
Chris@16
|
35 }
|
Chris@16
|
36
|
Chris@16
|
37 // 1
|
Chris@16
|
38
|
Chris@16
|
39 template<class R, class T,
|
Chris@16
|
40 class B1,
|
Chris@16
|
41 class A1, class A2>
|
Chris@16
|
42 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
|
Chris@16
|
43 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2)
|
Chris@16
|
44 {
|
Chris@16
|
45 typedef _mfi::BOOST_BIND_MF_NAME(mf1)<R, T, B1> F;
|
Chris@16
|
46 typedef typename _bi::list_av_2<A1, A2>::type list_type;
|
Chris@16
|
47 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
|
Chris@16
|
48 }
|
Chris@16
|
49
|
Chris@16
|
50 template<class R, class T,
|
Chris@16
|
51 class B1,
|
Chris@16
|
52 class A1, class A2>
|
Chris@16
|
53 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1>, typename _bi::list_av_2<A1, A2>::type>
|
Chris@16
|
54 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2)
|
Chris@16
|
55 {
|
Chris@16
|
56 typedef _mfi::BOOST_BIND_MF_NAME(cmf1)<R, T, B1> F;
|
Chris@16
|
57 typedef typename _bi::list_av_2<A1, A2>::type list_type;
|
Chris@16
|
58 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2));
|
Chris@16
|
59 }
|
Chris@16
|
60
|
Chris@16
|
61 // 2
|
Chris@16
|
62
|
Chris@16
|
63 template<class R, class T,
|
Chris@16
|
64 class B1, class B2,
|
Chris@16
|
65 class A1, class A2, class A3>
|
Chris@16
|
66 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
|
Chris@16
|
67 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3)
|
Chris@16
|
68 {
|
Chris@16
|
69 typedef _mfi::BOOST_BIND_MF_NAME(mf2)<R, T, B1, B2> F;
|
Chris@16
|
70 typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
|
Chris@16
|
71 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
|
Chris@16
|
72 }
|
Chris@16
|
73
|
Chris@16
|
74 template<class R, class T,
|
Chris@16
|
75 class B1, class B2,
|
Chris@16
|
76 class A1, class A2, class A3>
|
Chris@16
|
77 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2>, typename _bi::list_av_3<A1, A2, A3>::type>
|
Chris@16
|
78 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3)
|
Chris@16
|
79 {
|
Chris@16
|
80 typedef _mfi::BOOST_BIND_MF_NAME(cmf2)<R, T, B1, B2> F;
|
Chris@16
|
81 typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
|
Chris@16
|
82 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3));
|
Chris@16
|
83 }
|
Chris@16
|
84
|
Chris@16
|
85 // 3
|
Chris@16
|
86
|
Chris@16
|
87 template<class R, class T,
|
Chris@16
|
88 class B1, class B2, class B3,
|
Chris@16
|
89 class A1, class A2, class A3, class A4>
|
Chris@16
|
90 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
|
Chris@16
|
91 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4)
|
Chris@16
|
92 {
|
Chris@16
|
93 typedef _mfi::BOOST_BIND_MF_NAME(mf3)<R, T, B1, B2, B3> F;
|
Chris@16
|
94 typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
|
Chris@16
|
95 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
|
Chris@16
|
96 }
|
Chris@16
|
97
|
Chris@16
|
98 template<class R, class T,
|
Chris@16
|
99 class B1, class B2, class B3,
|
Chris@16
|
100 class A1, class A2, class A3, class A4>
|
Chris@16
|
101 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3>, typename _bi::list_av_4<A1, A2, A3, A4>::type>
|
Chris@16
|
102 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4)
|
Chris@16
|
103 {
|
Chris@16
|
104 typedef _mfi::BOOST_BIND_MF_NAME(cmf3)<R, T, B1, B2, B3> F;
|
Chris@16
|
105 typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
|
Chris@16
|
106 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4));
|
Chris@16
|
107 }
|
Chris@16
|
108
|
Chris@16
|
109 // 4
|
Chris@16
|
110
|
Chris@16
|
111 template<class R, class T,
|
Chris@16
|
112 class B1, class B2, class B3, class B4,
|
Chris@16
|
113 class A1, class A2, class A3, class A4, class A5>
|
Chris@16
|
114 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
|
Chris@16
|
115 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
|
Chris@16
|
116 {
|
Chris@16
|
117 typedef _mfi::BOOST_BIND_MF_NAME(mf4)<R, T, B1, B2, B3, B4> F;
|
Chris@16
|
118 typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
|
Chris@16
|
119 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
|
Chris@16
|
120 }
|
Chris@16
|
121
|
Chris@16
|
122 template<class R, class T,
|
Chris@16
|
123 class B1, class B2, class B3, class B4,
|
Chris@16
|
124 class A1, class A2, class A3, class A4, class A5>
|
Chris@16
|
125 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4>, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
|
Chris@16
|
126 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
|
Chris@16
|
127 {
|
Chris@16
|
128 typedef _mfi::BOOST_BIND_MF_NAME(cmf4)<R, T, B1, B2, B3, B4> F;
|
Chris@16
|
129 typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
|
Chris@16
|
130 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5));
|
Chris@16
|
131 }
|
Chris@16
|
132
|
Chris@16
|
133 // 5
|
Chris@16
|
134
|
Chris@16
|
135 template<class R, class T,
|
Chris@16
|
136 class B1, class B2, class B3, class B4, class B5,
|
Chris@16
|
137 class A1, class A2, class A3, class A4, class A5, class A6>
|
Chris@16
|
138 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
|
Chris@16
|
139 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
|
Chris@16
|
140 {
|
Chris@16
|
141 typedef _mfi::BOOST_BIND_MF_NAME(mf5)<R, T, B1, B2, B3, B4, B5> F;
|
Chris@16
|
142 typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
|
Chris@16
|
143 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
|
Chris@16
|
144 }
|
Chris@16
|
145
|
Chris@16
|
146 template<class R, class T,
|
Chris@16
|
147 class B1, class B2, class B3, class B4, class B5,
|
Chris@16
|
148 class A1, class A2, class A3, class A4, class A5, class A6>
|
Chris@16
|
149 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5>, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
|
Chris@16
|
150 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
|
Chris@16
|
151 {
|
Chris@16
|
152 typedef _mfi::BOOST_BIND_MF_NAME(cmf5)<R, T, B1, B2, B3, B4, B5> F;
|
Chris@16
|
153 typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
|
Chris@16
|
154 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6));
|
Chris@16
|
155 }
|
Chris@16
|
156
|
Chris@16
|
157 // 6
|
Chris@16
|
158
|
Chris@16
|
159 template<class R, class T,
|
Chris@16
|
160 class B1, class B2, class B3, class B4, class B5, class B6,
|
Chris@16
|
161 class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
Chris@16
|
162 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
|
Chris@16
|
163 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
|
Chris@16
|
164 {
|
Chris@16
|
165 typedef _mfi::BOOST_BIND_MF_NAME(mf6)<R, T, B1, B2, B3, B4, B5, B6> F;
|
Chris@16
|
166 typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
|
Chris@16
|
167 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
|
Chris@16
|
168 }
|
Chris@16
|
169
|
Chris@16
|
170 template<class R, class T,
|
Chris@16
|
171 class B1, class B2, class B3, class B4, class B5, class B6,
|
Chris@16
|
172 class A1, class A2, class A3, class A4, class A5, class A6, class A7>
|
Chris@16
|
173 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6>, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
|
Chris@16
|
174 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
|
Chris@16
|
175 {
|
Chris@16
|
176 typedef _mfi::BOOST_BIND_MF_NAME(cmf6)<R, T, B1, B2, B3, B4, B5, B6> F;
|
Chris@16
|
177 typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
|
Chris@16
|
178 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7));
|
Chris@16
|
179 }
|
Chris@16
|
180
|
Chris@16
|
181 // 7
|
Chris@16
|
182
|
Chris@16
|
183 template<class R, class T,
|
Chris@16
|
184 class B1, class B2, class B3, class B4, class B5, class B6, class B7,
|
Chris@16
|
185 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
Chris@16
|
186 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
|
Chris@16
|
187 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
|
Chris@16
|
188 {
|
Chris@16
|
189 typedef _mfi::BOOST_BIND_MF_NAME(mf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
|
Chris@16
|
190 typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
|
Chris@16
|
191 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
|
Chris@16
|
192 }
|
Chris@16
|
193
|
Chris@16
|
194 template<class R, class T,
|
Chris@16
|
195 class B1, class B2, class B3, class B4, class B5, class B6, class B7,
|
Chris@16
|
196 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
|
Chris@16
|
197 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7>, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
|
Chris@16
|
198 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
|
Chris@16
|
199 {
|
Chris@16
|
200 typedef _mfi::BOOST_BIND_MF_NAME(cmf7)<R, T, B1, B2, B3, B4, B5, B6, B7> F;
|
Chris@16
|
201 typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
|
Chris@16
|
202 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8));
|
Chris@16
|
203 }
|
Chris@16
|
204
|
Chris@16
|
205 // 8
|
Chris@16
|
206
|
Chris@16
|
207 template<class R, class T,
|
Chris@16
|
208 class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
|
Chris@16
|
209 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
|
Chris@16
|
210 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
|
Chris@16
|
211 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
|
Chris@16
|
212 {
|
Chris@16
|
213 typedef _mfi::BOOST_BIND_MF_NAME(mf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
|
Chris@16
|
214 typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
|
Chris@16
|
215 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
|
Chris@16
|
216 }
|
Chris@16
|
217
|
Chris@16
|
218 template<class R, class T,
|
Chris@16
|
219 class B1, class B2, class B3, class B4, class B5, class B6, class B7, class B8,
|
Chris@16
|
220 class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
|
Chris@16
|
221 _bi::bind_t<R, _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8>, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
|
Chris@16
|
222 BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
|
Chris@16
|
223 {
|
Chris@16
|
224 typedef _mfi::BOOST_BIND_MF_NAME(cmf8)<R, T, B1, B2, B3, B4, B5, B6, B7, B8> F;
|
Chris@16
|
225 typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
|
Chris@16
|
226 return _bi::bind_t<R, F, list_type>(F(f), list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
|
Chris@16
|
227 }
|