1 // -*- c++ -*-
2 /* Do not edit! -- generated file */
3 #ifndef _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_
4 #define _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_
5 #include <sigc++/adaptors/adaptor_trait.h>
6
7 namespace sigc {
8
9 /** Adaptor that perform a C-style cast on the return value of a functor.
10 * Use the convenience function sigc::retype_return() to create an instance of retype_return_functor.
11 *
12 * The following template arguments are used:
13 * - @e T_return Target type of the C-style cast.
14 * - @e T_functor Type of the functor to wrap.
15 *
16 * @ingroup retype
17 */
18 template <class T_return, class T_functor>
19 struct retype_return_functor : public adapts<T_functor>
20 {
21 template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void>
22 struct deduce_result_type
23 { typedef T_return type; };
24 typedef T_return result_type;
25
26 T_return operator()();
27
28 template <class T_arg1>
operatorretype_return_functor29 inline T_return operator()(T_arg1 _A_a1)
30 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
31 (_A_a1));
32 }
33
34 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
35 template <class T_arg1>
sun_forte_workaroundretype_return_functor36 inline T_return sun_forte_workaround(T_arg1 _A_a1)
37 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
38 (_A_a1));
39 }
40 #endif
41
42 template <class T_arg1,class T_arg2>
operatorretype_return_functor43 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2)
44 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
45 (_A_a1,_A_a2));
46 }
47
48 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
49 template <class T_arg1,class T_arg2>
sun_forte_workaroundretype_return_functor50 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2)
51 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
52 (_A_a1,_A_a2));
53 }
54 #endif
55
56 template <class T_arg1,class T_arg2,class T_arg3>
operatorretype_return_functor57 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
58 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
59 (_A_a1,_A_a2,_A_a3));
60 }
61
62 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
63 template <class T_arg1,class T_arg2,class T_arg3>
sun_forte_workaroundretype_return_functor64 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
65 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
66 (_A_a1,_A_a2,_A_a3));
67 }
68 #endif
69
70 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
operatorretype_return_functor71 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
72 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
73 (_A_a1,_A_a2,_A_a3,_A_a4));
74 }
75
76 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
77 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
sun_forte_workaroundretype_return_functor78 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
79 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
80 (_A_a1,_A_a2,_A_a3,_A_a4));
81 }
82 #endif
83
84 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
operatorretype_return_functor85 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
86 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
87 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5));
88 }
89
90 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
91 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
sun_forte_workaroundretype_return_functor92 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
93 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
94 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5));
95 }
96 #endif
97
98 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
operatorretype_return_functor99 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
100 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
101 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6));
102 }
103
104 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
105 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
sun_forte_workaroundretype_return_functor106 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
107 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
108 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6));
109 }
110 #endif
111
112 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
operatorretype_return_functor113 inline T_return operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
114 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
115 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7));
116 }
117
118 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
119 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
sun_forte_workaroundretype_return_functor120 inline T_return sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
121 { return T_return(this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
122 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7));
123 }
124 #endif
125
retype_return_functorretype_return_functor126 retype_return_functor() {}
127
128 /** Constructs a retype_return_functor object that perform a C-style cast on the return value of the passed functor.
129 * @param _A_functor Functor to invoke from operator()().
130 */
retype_return_functorretype_return_functor131 explicit retype_return_functor(typename type_trait<T_functor>::take _A_functor)
132 : adapts<T_functor>(_A_functor)
133 {}
134 };
135
136 template <class T_return, class T_functor>
operator()137 T_return retype_return_functor<T_return, T_functor>::operator()()
138 { return T_return(this->functor_()); }
139
140
141 /** Adaptor that perform a C-style cast on the return value of a functor.
142 * This template specialization is for a void return. It drops the return value of the functor it invokes.
143 * Use the convenience function sigc::hide_return() to create an instance of sigc::retype_return_functor<void>.
144 *
145 * @ingroup retype
146 */
147 /* The void specialization needed because of explicit cast to T_return.
148 */
149 template <class T_functor>
150 struct retype_return_functor<void, T_functor> : public adapts<T_functor>
151 {
152 template <class T_arg1=void,class T_arg2=void,class T_arg3=void,class T_arg4=void,class T_arg5=void,class T_arg6=void,class T_arg7=void>
153 struct deduce_result_type
154 { typedef void type; };
155 typedef void result_type;
156
157 void operator()();
158
159 template <class T_arg1>
160 inline void operator()(T_arg1 _A_a1)
161 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
162 (_A_a1);
163 }
164
165 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
166 template <class T_arg1>
167 inline void sun_forte_workaround(T_arg1 _A_a1)
168 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass>
169 (_A_a1);
170 }
171 #endif
172
173 template <class T_arg1,class T_arg2>
174 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2)
175 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
176 (_A_a1,_A_a2);
177 }
178
179 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
180 template <class T_arg1,class T_arg2>
181 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2)
182 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass>
183 (_A_a1,_A_a2);
184 }
185 #endif
186
187 template <class T_arg1,class T_arg2,class T_arg3>
188 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
189 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
190 (_A_a1,_A_a2,_A_a3);
191 }
192
193 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
194 template <class T_arg1,class T_arg2,class T_arg3>
195 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3)
196 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass>
197 (_A_a1,_A_a2,_A_a3);
198 }
199 #endif
200
201 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
202 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
203 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
204 (_A_a1,_A_a2,_A_a3,_A_a4);
205 }
206
207 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
208 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4>
209 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4)
210 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass>
211 (_A_a1,_A_a2,_A_a3,_A_a4);
212 }
213 #endif
214
215 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
216 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
217 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
218 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5);
219 }
220
221 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
222 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5>
223 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5)
224 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass>
225 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5);
226 }
227 #endif
228
229 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
230 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
231 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
232 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6);
233 }
234
235 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
236 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6>
237 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6)
238 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass>
239 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6);
240 }
241 #endif
242
243 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
244 inline void operator()(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
245 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
246 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7);
247 }
248
249 #ifndef SIGC_TEMPLATE_SPECIALIZATION_OPERATOR_OVERLOAD
250 template <class T_arg1,class T_arg2,class T_arg3,class T_arg4,class T_arg5,class T_arg6,class T_arg7>
251 inline void sun_forte_workaround(T_arg1 _A_a1,T_arg2 _A_a2,T_arg3 _A_a3,T_arg4 _A_a4,T_arg5 _A_a5,T_arg6 _A_a6,T_arg7 _A_a7)
252 { this->functor_.SIGC_WORKAROUND_OPERATOR_PARENTHESES<typename type_trait<T_arg1>::pass,typename type_trait<T_arg2>::pass,typename type_trait<T_arg3>::pass,typename type_trait<T_arg4>::pass,typename type_trait<T_arg5>::pass,typename type_trait<T_arg6>::pass,typename type_trait<T_arg7>::pass>
253 (_A_a1,_A_a2,_A_a3,_A_a4,_A_a5,_A_a6,_A_a7);
254 }
255 #endif
256
257 retype_return_functor() {}
258 retype_return_functor(typename type_trait<T_functor>::take _A_functor)
259 : adapts<T_functor>(_A_functor)
260 {}
261 };
262
263 template <class T_functor>
264 void retype_return_functor<void, T_functor>::operator()()
265 { this->functor_(); }
266
267
268 //template specialization of visit_each<>(action, functor):
269 /** Performs a functor on each of the targets of a functor.
270 * The function overload for sigc::retype_return_functor performs a functor on the
271 * functor stored in the sigc::retype_return_functor object.
272 *
273 * @ingroup retype
274 */
275 template <class T_action, class T_return, class T_functor>
276 void visit_each(const T_action& _A_action,
277 const retype_return_functor<T_return, T_functor>& _A_target)
278 {
279 visit_each(_A_action, _A_target.functor_);
280 }
281
282
283 /** Creates an adaptor of type sigc::retype_return_functor which performs a C-style cast on the return value of the passed functor.
284 * The template argument @e T_return specifies the target type of the cast.
285 *
286 * @param _A_functor Functor that should be wrapped.
287 * @return Adaptor that executes @e _A_functor performing a C-style casts on the return value.
288 *
289 * @ingroup retype
290 */
291 template <class T_return, class T_functor>
292 inline retype_return_functor<T_return, T_functor>
293 retype_return(const T_functor& _A_functor)
294 { return retype_return_functor<T_return, T_functor>(_A_functor); }
295
296 /** Creates an adaptor of type sigc::retype_return_functor which drops the return value of the passed functor.
297 *
298 * @param _A_functor Functor that should be wrapped.
299 * @return Adaptor that executes @e _A_functor dropping its return value.
300 *
301 * @ingroup hide
302 */
303 template <class T_functor>
304 inline retype_return_functor<void, T_functor>
305 hide_return(const T_functor& _A_functor)
306 { return retype_return_functor<void, T_functor>(_A_functor); }
307
308 } /* namespace sigc */
309 #endif /* _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ */
310