Chris@16
|
1 #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
|
Chris@16
|
2 #define BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
|
Chris@16
|
3
|
Chris@16
|
4 //
|
Chris@16
|
5 // make_adaptable.hpp
|
Chris@16
|
6 //
|
Chris@16
|
7 // Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
|
Chris@16
|
8 //
|
Chris@16
|
9 // Distributed under the Boost Software License, Version 1.0. (See
|
Chris@16
|
10 // accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
11 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
12 //
|
Chris@16
|
13
|
Chris@16
|
14 namespace boost
|
Chris@16
|
15 {
|
Chris@16
|
16
|
Chris@16
|
17 namespace _bi
|
Chris@16
|
18 {
|
Chris@16
|
19
|
Chris@16
|
20 template<class R, class F> class af0
|
Chris@16
|
21 {
|
Chris@16
|
22 public:
|
Chris@16
|
23
|
Chris@16
|
24 typedef R result_type;
|
Chris@16
|
25
|
Chris@16
|
26 explicit af0(F f): f_(f)
|
Chris@16
|
27 {
|
Chris@16
|
28 }
|
Chris@16
|
29
|
Chris@16
|
30 result_type operator()()
|
Chris@16
|
31 {
|
Chris@16
|
32 return f_();
|
Chris@16
|
33 }
|
Chris@16
|
34
|
Chris@16
|
35 result_type operator()() const
|
Chris@16
|
36 {
|
Chris@16
|
37 return f_();
|
Chris@16
|
38 }
|
Chris@16
|
39
|
Chris@16
|
40 private:
|
Chris@16
|
41
|
Chris@16
|
42 F f_;
|
Chris@16
|
43 };
|
Chris@16
|
44
|
Chris@16
|
45 template<class R, class A1, class F> class af1
|
Chris@16
|
46 {
|
Chris@16
|
47 public:
|
Chris@16
|
48
|
Chris@16
|
49 typedef R result_type;
|
Chris@16
|
50 typedef A1 argument_type;
|
Chris@16
|
51 typedef A1 arg1_type;
|
Chris@16
|
52
|
Chris@16
|
53 explicit af1(F f): f_(f)
|
Chris@16
|
54 {
|
Chris@16
|
55 }
|
Chris@16
|
56
|
Chris@16
|
57 result_type operator()(A1 a1)
|
Chris@16
|
58 {
|
Chris@16
|
59 return f_(a1);
|
Chris@16
|
60 }
|
Chris@16
|
61
|
Chris@16
|
62 result_type operator()(A1 a1) const
|
Chris@16
|
63 {
|
Chris@16
|
64 return f_(a1);
|
Chris@16
|
65 }
|
Chris@16
|
66
|
Chris@16
|
67 private:
|
Chris@16
|
68
|
Chris@16
|
69 F f_;
|
Chris@16
|
70 };
|
Chris@16
|
71
|
Chris@16
|
72 template<class R, class A1, class A2, class F> class af2
|
Chris@16
|
73 {
|
Chris@16
|
74 public:
|
Chris@16
|
75
|
Chris@16
|
76 typedef R result_type;
|
Chris@16
|
77 typedef A1 first_argument_type;
|
Chris@16
|
78 typedef A2 second_argument_type;
|
Chris@16
|
79 typedef A1 arg1_type;
|
Chris@16
|
80 typedef A2 arg2_type;
|
Chris@16
|
81
|
Chris@16
|
82 explicit af2(F f): f_(f)
|
Chris@16
|
83 {
|
Chris@16
|
84 }
|
Chris@16
|
85
|
Chris@16
|
86 result_type operator()(A1 a1, A2 a2)
|
Chris@16
|
87 {
|
Chris@16
|
88 return f_(a1, a2);
|
Chris@16
|
89 }
|
Chris@16
|
90
|
Chris@16
|
91 result_type operator()(A1 a1, A2 a2) const
|
Chris@16
|
92 {
|
Chris@16
|
93 return f_(a1, a2);
|
Chris@16
|
94 }
|
Chris@16
|
95
|
Chris@16
|
96 private:
|
Chris@16
|
97
|
Chris@16
|
98 F f_;
|
Chris@16
|
99 };
|
Chris@16
|
100
|
Chris@16
|
101 template<class R, class A1, class A2, class A3, class F> class af3
|
Chris@16
|
102 {
|
Chris@16
|
103 public:
|
Chris@16
|
104
|
Chris@16
|
105 typedef R result_type;
|
Chris@16
|
106 typedef A1 arg1_type;
|
Chris@16
|
107 typedef A2 arg2_type;
|
Chris@16
|
108 typedef A3 arg3_type;
|
Chris@16
|
109
|
Chris@16
|
110 explicit af3(F f): f_(f)
|
Chris@16
|
111 {
|
Chris@16
|
112 }
|
Chris@16
|
113
|
Chris@16
|
114 result_type operator()(A1 a1, A2 a2, A3 a3)
|
Chris@16
|
115 {
|
Chris@16
|
116 return f_(a1, a2, a3);
|
Chris@16
|
117 }
|
Chris@16
|
118
|
Chris@16
|
119 result_type operator()(A1 a1, A2 a2, A3 a3) const
|
Chris@16
|
120 {
|
Chris@16
|
121 return f_(a1, a2, a3);
|
Chris@16
|
122 }
|
Chris@16
|
123
|
Chris@16
|
124 private:
|
Chris@16
|
125
|
Chris@16
|
126 F f_;
|
Chris@16
|
127 };
|
Chris@16
|
128
|
Chris@16
|
129 template<class R, class A1, class A2, class A3, class A4, class F> class af4
|
Chris@16
|
130 {
|
Chris@16
|
131 public:
|
Chris@16
|
132
|
Chris@16
|
133 typedef R result_type;
|
Chris@16
|
134 typedef A1 arg1_type;
|
Chris@16
|
135 typedef A2 arg2_type;
|
Chris@16
|
136 typedef A3 arg3_type;
|
Chris@16
|
137 typedef A4 arg4_type;
|
Chris@16
|
138
|
Chris@16
|
139 explicit af4(F f): f_(f)
|
Chris@16
|
140 {
|
Chris@16
|
141 }
|
Chris@16
|
142
|
Chris@16
|
143 result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4)
|
Chris@16
|
144 {
|
Chris@16
|
145 return f_(a1, a2, a3, a4);
|
Chris@16
|
146 }
|
Chris@16
|
147
|
Chris@16
|
148 result_type operator()(A1 a1, A2 a2, A3 a3, A4 a4) const
|
Chris@16
|
149 {
|
Chris@16
|
150 return f_(a1, a2, a3, a4);
|
Chris@16
|
151 }
|
Chris@16
|
152
|
Chris@16
|
153 private:
|
Chris@16
|
154
|
Chris@16
|
155 F f_;
|
Chris@16
|
156 };
|
Chris@16
|
157
|
Chris@16
|
158 } // namespace _bi
|
Chris@16
|
159
|
Chris@16
|
160 template<class R, class F> _bi::af0<R, F> make_adaptable(F f)
|
Chris@16
|
161 {
|
Chris@16
|
162 return _bi::af0<R, F>(f);
|
Chris@16
|
163 }
|
Chris@16
|
164
|
Chris@16
|
165 template<class R, class A1, class F> _bi::af1<R, A1, F> make_adaptable(F f)
|
Chris@16
|
166 {
|
Chris@16
|
167 return _bi::af1<R, A1, F>(f);
|
Chris@16
|
168 }
|
Chris@16
|
169
|
Chris@16
|
170 template<class R, class A1, class A2, class F> _bi::af2<R, A1, A2, F> make_adaptable(F f)
|
Chris@16
|
171 {
|
Chris@16
|
172 return _bi::af2<R, A1, A2, F>(f);
|
Chris@16
|
173 }
|
Chris@16
|
174
|
Chris@16
|
175 template<class R, class A1, class A2, class A3, class F> _bi::af3<R, A1, A2, A3, F> make_adaptable(F f)
|
Chris@16
|
176 {
|
Chris@16
|
177 return _bi::af3<R, A1, A2, A3, F>(f);
|
Chris@16
|
178 }
|
Chris@16
|
179
|
Chris@16
|
180 template<class R, class A1, class A2, class A3, class A4, class F> _bi::af4<R, A1, A2, A3, A4, F> make_adaptable(F f)
|
Chris@16
|
181 {
|
Chris@16
|
182 return _bi::af4<R, A1, A2, A3, A4, F>(f);
|
Chris@16
|
183 }
|
Chris@16
|
184
|
Chris@16
|
185 } // namespace boost
|
Chris@16
|
186
|
Chris@16
|
187 #endif // #ifndef BOOST_BIND_MAKE_ADAPTABLE_HPP_INCLUDED
|