|
1 #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED |
|
2 #define BOOST_BIND_PROTECT_HPP_INCLUDED |
|
3 |
|
4 // |
|
5 // protect.hpp |
|
6 // |
|
7 // Copyright (c) 2002 Peter Dimov and Multi Media Ltd. |
|
8 // |
|
9 // Distributed under the Boost Software License, Version 1.0. (See |
|
10 // accompanying file LICENSE_1_0.txt or copy at |
|
11 // http://www.boost.org/LICENSE_1_0.txt) |
|
12 // |
|
13 |
|
14 namespace boost |
|
15 { |
|
16 |
|
17 namespace _bi |
|
18 { |
|
19 |
|
20 template<class F> class protected_bind_t |
|
21 { |
|
22 public: |
|
23 |
|
24 typedef typename F::result_type result_type; |
|
25 |
|
26 explicit protected_bind_t(F f): f_(f) |
|
27 { |
|
28 } |
|
29 |
|
30 result_type operator()() |
|
31 { |
|
32 return f_(); |
|
33 } |
|
34 |
|
35 result_type operator()() const |
|
36 { |
|
37 return f_(); |
|
38 } |
|
39 |
|
40 template<class A1> result_type operator()(A1 & a1) |
|
41 { |
|
42 return f_(a1); |
|
43 } |
|
44 |
|
45 template<class A1> result_type operator()(A1 & a1) const |
|
46 { |
|
47 return f_(a1); |
|
48 } |
|
49 |
|
50 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) |
|
51 { |
|
52 return f_(a1, a2); |
|
53 } |
|
54 |
|
55 template<class A1, class A2> result_type operator()(A1 & a1, A2 & a2) const |
|
56 { |
|
57 return f_(a1, a2); |
|
58 } |
|
59 |
|
60 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) |
|
61 { |
|
62 return f_(a1, a2, a3); |
|
63 } |
|
64 |
|
65 template<class A1, class A2, class A3> result_type operator()(A1 & a1, A2 & a2, A3 & a3) const |
|
66 { |
|
67 return f_(a1, a2, a3); |
|
68 } |
|
69 |
|
70 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) |
|
71 { |
|
72 return f_(a1, a2, a3, a4); |
|
73 } |
|
74 |
|
75 template<class A1, class A2, class A3, class A4> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4) const |
|
76 { |
|
77 return f_(a1, a2, a3, a4); |
|
78 } |
|
79 |
|
80 template<class A1, class A2, class A3, class A4, class A5> result_type operator()(A1 & a1, A2 & a2, A3 & a3, A4 & a4, A5 & a5) |
|
81 { |
|
82 return f_(a1, a2, a3, a4, a5); |
|
83 } |
|
84 |
|
85 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 |
|
86 { |
|
87 return f_(a1, a2, a3, a4, a5); |
|
88 } |
|
89 |
|
90 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) |
|
91 { |
|
92 return f_(a1, a2, a3, a4, a5, a6); |
|
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 return f_(a1, a2, a3, a4, a5, a6); |
|
98 } |
|
99 |
|
100 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) |
|
101 { |
|
102 return f_(a1, a2, a3, a4, a5, a6, a7); |
|
103 } |
|
104 |
|
105 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 |
|
106 { |
|
107 return f_(a1, a2, a3, a4, a5, a6, a7); |
|
108 } |
|
109 |
|
110 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) |
|
111 { |
|
112 return f_(a1, a2, a3, a4, a5, a6, a7, a8); |
|
113 } |
|
114 |
|
115 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 |
|
116 { |
|
117 return f_(a1, a2, a3, a4, a5, a6, a7, a8); |
|
118 } |
|
119 |
|
120 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) |
|
121 { |
|
122 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); |
|
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) const |
|
126 { |
|
127 return f_(a1, a2, a3, a4, a5, a6, a7, a8, a9); |
|
128 } |
|
129 |
|
130 private: |
|
131 |
|
132 F f_; |
|
133 }; |
|
134 |
|
135 } // namespace _bi |
|
136 |
|
137 template<class F> _bi::protected_bind_t<F> protect(F f) |
|
138 { |
|
139 return _bi::protected_bind_t<F>(f); |
|
140 } |
|
141 |
|
142 } // namespace boost |
|
143 |
|
144 #endif // #ifndef BOOST_BIND_PROTECT_HPP_INCLUDED |