ea413a0b305b8d420d9b0937d3dc8af195ab8d08
[ardour.git] / libs / sigc++2 / sigc++ / adaptors / retype_return.h
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>
29   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>
36   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>
43   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>
50   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>
57   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>
64   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>
71   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>
78   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>
85   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>
92   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>
99   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>
106   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>
113   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>
120   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     
126   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    */
131   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>
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 /** Performs a functor on each of the targets of a functor.
269  * The function overload for sigc::retype_return_functor performs a functor on the
270  * functor stored in the sigc::retype_return_functor object.
271  *
272  * @ingroup retype
273  */
274 template <class T_action, class T_return, class T_functor>
275 void visit_each(const T_action& _A_action,
276                 const retype_return_functor<T_return, T_functor>& _A_target)
277 {
278   visit_each(_A_action, _A_target.functor_);
279 }
280
281
282 /** Creates an adaptor of type sigc::retype_return_functor which performs a C-style cast on the return value of the passed functor.
283  * The template argument @e T_return specifies the target type of the cast.
284  *
285  * @param _A_functor Functor that should be wrapped.
286  * @return Adaptor that executes @e _A_functor performing a C-style casts on the return value.
287  *
288  * @ingroup retype
289  */
290 template <class T_return, class T_functor>
291 inline retype_return_functor<T_return, T_functor>
292 retype_return(const T_functor& _A_functor)
293   { return retype_return_functor<T_return, T_functor>(_A_functor); }
294
295 /** Creates an adaptor of type sigc::retype_return_functor which drops the return value of the passed functor.
296  *
297  * @param _A_functor Functor that should be wrapped.
298  * @return Adaptor that executes @e _A_functor dropping its return value.
299  *
300  * @ingroup hide
301  */
302 template <class T_functor>
303 inline retype_return_functor<void, T_functor>
304 hide_return(const T_functor& _A_functor)
305   { return retype_return_functor<void, T_functor>(_A_functor); }
306
307 } /* namespace sigc */
308 #endif /* _SIGC_ADAPTORS_MACROS_RETYPE_RETURNHM4_ */