7 using mel::core::FunctionCallbackInterface;
8 using mel::core::FunctorCallbackInterface;
25 #if VARIABLE_NUM_ARGS == VARIABLE_MAX_ARGS
36 template <
class T,
class TRet, VARIABLE_ARGS>
struct _CallbackCreator
39 static CallbackInterface<TRet, VARIABLE_ARGS_DECL>*
45 return new FunctorCallbackInterface<
46 TRet, typename ::std::remove_reference<T>::type,
47 VARIABLE_ARGS_DECL>( ::std::forward<T>( functor ) );
51 template <
class TRet, VARIABLE_ARGS>
class Callback_Base
54 typedef TRet ReturnType;
62 Callback_Base( T&& functor,
const use_functor_t& )
65 _CallbackCreator<T, TRet, VARIABLE_ARGS_DECL>::create(
66 ::std::forward<T>( functor ) );
70 Callback_Base( T&& functor,
const use_function_t& )
73 new FunctionCallbackInterface<TRet, VARIABLE_ARGS_DECL>(
74 ::std::forward<T>( functor ) );
77 Callback_Base(
const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
82 virtual ~Callback_Base() {
delete mCallBack; };
88 const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
const
90 return *mCallBack == *( ev2.mCallBack );
96 Callback_Base<TRet, VARIABLE_ARGS_DECL>&
97 operator=(
const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 );
99 virtual Callback_Base<TRet, VARIABLE_ARGS_DECL>* clone()
const
101 return new Callback_Base<TRet, VARIABLE_ARGS_DECL>( *
this );
106 CallbackInterface<TRet, VARIABLE_ARGS_DECL>* getCallback()
115 CallbackInterface<TRet, VARIABLE_ARGS_DECL>* mCallBack;
118 Callback_Base() { mCallBack = 0; };
121 template <
class TRet, VARIABLE_ARGS_NODEFAULT>
122 Callback_Base<TRet, VARIABLE_ARGS_DECL>&
123 Callback_Base<TRet, VARIABLE_ARGS_DECL>::operator=(
124 const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
129 mCallBack = (CallbackInterface<TRet, VARIABLE_ARGS_DECL>*)
130 ev2.mCallBack->clone();
137 template <
class TRet, VARIABLE_ARGS>
140 public Callback_Base<TRet, VARIABLE_ARGS_DECL>
151 return ( *Callback_Base<TRet, VARIABLE_ARGS_DECL>::mCallBack )(
161 : Callback_Base<TRet, VARIABLE_ARGS_DECL>(
162 ::std::forward<T>( functor ), c )
167 : Callback_Base<TRet, VARIABLE_ARGS_DECL>(
168 std::forward<T>( functor ), c )
171 Callback(
const Callback<TRet, VARIABLE_ARGS_DECL>& ev2 )
172 : Callback_Base<TRet, VARIABLE_ARGS_DECL>( ev2 ){};
173 Callback<TRet, VARIABLE_ARGS_DECL>* clone()
const
175 return new Callback<TRet, VARIABLE_ARGS_DECL>( *
this );
181 Callback_Base<TRet, VARIABLE_ARGS_DECL>::mCallBack = 0;
186 template <
class TRet>
187 class Callback<TRet, void> :
public Callback_Base<TRet, void>
195 return ( *Callback_Base<TRet, void>::mCallBack )();
207 : Callback_Base<TRet, void>( ::std::forward<T>( functor ), c )
212 : Callback_Base<TRet, void>( ::std::forward<T>( functor ), c )
215 Callback(
const Callback<TRet, void>& ev2 )
216 : Callback_Base<TRet, void>( ev2 ){};
217 Callback<TRet, void>* clone()
const
219 return new Callback<TRet, void>( *
this );
223 Callback() { Callback_Base<TRet, void>::mCallBack = 0; };
226 template <
class TRet,
class T>
227 Callback<TRet, void>* makeEvent( T functor )
229 return new Callback<TRet, void>( functor,
230 ::mel::core::use_functor );
235 template <
class T,
class TRet, VARIABLE_ARGS>
236 struct _CallbackCreator<T, TRet, VARIABLE_ARGS_DECL, void>
239 static CallbackInterface<TRet, VARIABLE_ARGS_DECL>*
240 create( T&& functor )
252 return new FunctorCallbackInterface<
253 TRet, typename ::std::remove_reference<T>::type,
254 VARIABLE_ARGS_DECL>( ::std::forward<T>( functor ) );
258 template <
class TRet, VARIABLE_ARGS>
259 class Callback_Base<TRet, VARIABLE_ARGS_DECL, void>
263 typedef TRet ReturnType;
266 Callback_Base() { mCallBack = 0; };
269 Callback_Base( T&& functor,
const use_functor_t& )
272 _CallbackCreator<T, TRet, VARIABLE_ARGS_DECL>::create(
273 ::std::forward<T>( functor ) );
278 Callback_Base( T&& functor,
const use_function_t& )
281 new FunctionCallbackInterface<TRet, VARIABLE_ARGS_DECL>(
282 ::std::forward<T>( functor ) );
284 Callback_Base(
const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
289 virtual ~Callback_Base() {
delete mCallBack; };
295 const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
const
297 return *mCallBack == *( ev2.mCallBack );
303 Callback_Base<TRet, VARIABLE_ARGS_DECL>&
304 operator=(
const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 );
306 virtual Callback_Base<TRet, VARIABLE_ARGS_DECL>* clone()
const
308 return new Callback_Base<TRet, VARIABLE_ARGS_DECL>( *
this );
313 CallbackInterface<TRet, VARIABLE_ARGS_DECL>* getCallback()
322 CallbackInterface<TRet, VARIABLE_ARGS_DECL>* mCallBack;
324 template <
class TRet, VARIABLE_ARGS>
325 Callback_Base<TRet, VARIABLE_ARGS_DECL>&
326 Callback_Base<TRet, VARIABLE_ARGS_DECL>::operator=(
327 const Callback_Base<TRet, VARIABLE_ARGS_DECL>& ev2 )
332 mCallBack = (CallbackInterface<TRet, VARIABLE_ARGS_DECL>*)
333 ev2.mCallBack->clone();
338 template <
class TRet, VARIABLE_ARGS>
339 class Callback<TRet, VARIABLE_ARGS_DECL, void>
340 :
public Callback_Base<TRet, VARIABLE_ARGS_DECL>
350 return ( *Callback_Base<TRet, VARIABLE_ARGS_DECL>::mCallBack )(
360 Callback( T&& functor,
const use_functor_t& c )
361 : Callback_Base<TRet, VARIABLE_ARGS_DECL>(
362 ::std::forward<T>( functor ), c ){};
364 Callback( T&& functor,
const use_function_t& c )
365 : Callback_Base<TRet, VARIABLE_ARGS_DECL>(
366 ::std::forward<T>( functor ), c ){};
367 Callback(
const Callback<TRet, VARIABLE_ARGS_DECL>& ev2 )
368 : Callback_Base<TRet, VARIABLE_ARGS_DECL>( ev2 ){};
369 Callback<TRet, VARIABLE_ARGS_DECL>* clone()
const
371 return new Callback<TRet, VARIABLE_ARGS_DECL>( *
this );
377 Callback_Base<TRet, VARIABLE_ARGS_DECL>::mCallBack = 0;
TRet operator()()
Definition: Callback_Impl.h:193
Callback(T &&functor, const use_functor_t &c)
Definition: Callback_Impl.h:206
create Callback from callable
Definition: Callback_Impl.h:142
Callback(T &&functor, const use_functor_t &c)
Definition: Callback_Impl.h:160
TRet operator()(VARIABLE_ARGS_IMPL)
Definition: Callback_Impl.h:149
Small operator==(const AnyType &, const AnyType &)
Definition: Callback_Impl.h:11
Definition: Callback_Impl.h:30
Definition: Callback_Impl.h:27