1#ifndef SEAD_DELEGATE_H_
2#define SEAD_DELEGATE_H_
4#include <basis/seadNew.h>
8template <
typename T,
typename METHODPTR,
typename IDELEGATE>
31 void bind(T* o, METHODPTR m)
59template <
typename T,
typename R>
63 typedef R (T::*MethodPtr)();
66template <
typename T,
typename R>
70 typedef R (T::*MethodPtr)()
const;
77 typedef R (*MethodPtr)();
113 if (
this->mObject &&
this->mMethod)
114 (
this->mObject->*
this->mMethod)();
119 if (
this->mObject &&
this->mMethod)
120 (
this->mObject->*
this->mMethod)();
130 return new (heap)
self(*
this);
135class Delegate<
void> :
public DelegateBase<
void,
typename DelegateTraits<
void,
void>::MethodPtr, IDelegate >
139 typedef typename DelegateTraits<
void,
void>::MethodPtr MethodPtr;
143 : DelegateBase<
void, MethodPtr, IDelegate >()
147 Delegate(MethodPtr m)
148 : DelegateBase<
void, MethodPtr, IDelegate >(
nullptr, m)
152 void invoke() override
164 void operator() ()
const
171 return new (heap) self(*
this);
195 if (
this->mObject &&
this->mMethod)
196 (
this->mObject->*
this->mMethod)();
201 if (
this->mObject &&
this->mMethod)
202 (
this->mObject->*
this->mMethod)();
212 return new (heap)
self(*
this);
240 return Delegate<
void>(m);
243template <
typename T,
typename A,
typename R>
247 typedef R (T::*MethodPtr)(A);
250template <
typename T,
typename A,
typename R>
254 typedef R (T::*MethodPtr)(A)
const;
257template <
typename A,
typename R>
261 typedef R (*MethodPtr)(A);
276template <
typename T,
typename A>
295 if (
this->mObject &&
this->mMethod)
296 (
this->mObject->*
this->mMethod)(a);
301 if (
this->mObject &&
this->mMethod)
302 (
this->mObject->*
this->mMethod)(a);
346template <
typename T,
typename A>
365 if (
this->mObject &&
this->mMethod)
366 (
this->mObject->*
this->mMethod)(a);
371 if (
this->mObject &&
this->mMethod)
372 (
this->mObject->*
this->mMethod)(a);
396template <
typename T,
typename A>
410template <
typename T,
typename A1,
typename A2,
typename R>
414 typedef R (T::*MethodPtr)(A1, A2);
417template <
typename T,
typename A1,
typename A2,
typename R>
421 typedef R (T::*MethodPtr)(A1, A2)
const;
424template <
typename A1,
typename A2,
typename R>
428 typedef R (*MethodPtr)(A1, A2);
431template <
typename A1,
typename A2>
443template <
typename T,
typename A1,
typename A2>
462 if (
this->mObject &&
this->mMethod)
463 (
this->mObject->*
this->mMethod)(a1, a2);
468 if (
this->mObject &&
this->mMethod)
469 (
this->mObject->*
this->mMethod)(a1, a2);
478template <
typename A1,
typename A2>
498 (
this->mMethod)(a1, a2);
504 (
this->mMethod)(a1, a2);
513template <
typename T,
typename A1,
typename A2>
532 if (
this->mObject &&
this->mMethod)
533 (
this->mObject->*
this->mMethod)(a1, a2);
538 if (
this->mObject &&
this->mMethod)
539 (
this->mObject->*
this->mMethod)(a1, a2);
548template<
typename A1,
typename A2>
563template <
typename T,
typename A1,
typename A2>
570template <
typename A1,
typename A2>
Definition seadDelegate.h:348
Delegate1Const(const T *o, MethodPtr m)
Definition seadDelegate.h:358
Delegate1Const()
Definition seadDelegate.h:353
void operator()(A a) const
Definition seadDelegate.h:375
void invoke(A a) const
Definition seadDelegate.h:369
virtual void invoke(A a)
Definition seadDelegate.h:363
DelegateTraits1Const< T, A, void >::MethodPtr MethodPtr
Definition seadDelegate.h:350
Definition seadDelegate.h:313
Delegate1(MethodPtr m)
Definition seadDelegate.h:323
virtual void invoke(A a)
Definition seadDelegate.h:328
void operator()(A a) const
Definition seadDelegate.h:340
Delegate1()
Definition seadDelegate.h:318
void invoke(A a) const
Definition seadDelegate.h:334
DelegateTraits1< void, A, void >::MethodPtr MethodPtr
Definition seadDelegate.h:315
Definition seadDelegate.h:278
void operator()(A a) const
Definition seadDelegate.h:305
virtual void invoke(A a)
Definition seadDelegate.h:293
void invoke(A a) const
Definition seadDelegate.h:299
Delegate1()
Definition seadDelegate.h:283
Delegate1(T *o, MethodPtr m)
Definition seadDelegate.h:288
DelegateTraits1< T, A, void >::MethodPtr MethodPtr
Definition seadDelegate.h:280
Definition seadDelegate.h:515
DelegateTraits2Const< T, A1, A2, void >::MethodPtr MethodPtr
Definition seadDelegate.h:517
Delegate2Const(const T *o, MethodPtr m)
Definition seadDelegate.h:525
virtual void invoke(A1 a1, A2 a2)
Definition seadDelegate.h:530
Delegate2Const()
Definition seadDelegate.h:520
void invoke(A1 a1, A2 a2) const
Definition seadDelegate.h:536
void operator()(A1 a1, A2 a2) const
Definition seadDelegate.h:542
Definition seadDelegate.h:480
Delegate2()
Definition seadDelegate.h:485
Delegate2(MethodPtr m)
Definition seadDelegate.h:490
virtual void invoke(A1 a1, A2 a2)
Definition seadDelegate.h:495
void operator()(A1 a1, A2 a2) const
Definition seadDelegate.h:507
DelegateTraits2< void, A1, A2, void >::MethodPtr MethodPtr
Definition seadDelegate.h:482
void invoke(A1 a1, A2 a2) const
Definition seadDelegate.h:501
Definition seadDelegate.h:445
Delegate2()
Definition seadDelegate.h:450
Delegate2(T *o, MethodPtr m)
Definition seadDelegate.h:455
DelegateTraits2< T, A1, A2, void >::MethodPtr MethodPtr
Definition seadDelegate.h:447
virtual void invoke(A1 a1, A2 a2)
Definition seadDelegate.h:460
void operator()(A1 a1, A2 a2) const
Definition seadDelegate.h:472
void invoke(A1 a1, A2 a2) const
Definition seadDelegate.h:466
Definition seadDelegate.h:10
METHODPTR mMethod
Definition seadDelegate.h:16
void bind(T *o)
Definition seadDelegate.h:37
T * getObject() const
Definition seadDelegate.h:53
void unbind()
Definition seadDelegate.h:47
METHODPTR MethodPtr
Definition seadDelegate.h:12
T * mObject
Definition seadDelegate.h:15
DelegateBase(T *o, METHODPTR m)
Definition seadDelegate.h:25
void bind(METHODPTR m)
Definition seadDelegate.h:42
DelegateBase()
Definition seadDelegate.h:19
void bind(T *o, METHODPTR m)
Definition seadDelegate.h:31
Definition seadDelegate.h:177
void operator()() const
Definition seadDelegate.h:205
virtual IDelegate * clone(Heap *heap) const
Definition seadDelegate.h:210
DelegateConst(const T *o, MethodPtr m)
Definition seadDelegate.h:188
virtual void invoke()
Definition seadDelegate.h:193
DelegateTraitsConst< T, void >::MethodPtr MethodPtr
Definition seadDelegate.h:180
void invoke() const
Definition seadDelegate.h:199
DelegateConst()
Definition seadDelegate.h:183
DelegateConst< T > self
Definition seadDelegate.h:179
Definition seadDelegate.h:252
Definition seadDelegate.h:259
Definition seadDelegate.h:245
Definition seadDelegate.h:419
Definition seadDelegate.h:426
Definition seadDelegate.h:412
Definition seadDelegate.h:68
Definition seadDelegate.h:75
Definition seadDelegate.h:61
Definition seadDelegate.h:95
virtual void invoke()
Definition seadDelegate.h:111
DelegateTraits< T, void >::MethodPtr MethodPtr
Definition seadDelegate.h:98
Delegate()
Definition seadDelegate.h:101
void operator()() const
Definition seadDelegate.h:123
virtual IDelegate * clone(Heap *heap) const
Definition seadDelegate.h:128
Delegate(T *o, MethodPtr m)
Definition seadDelegate.h:106
void invoke() const
Definition seadDelegate.h:117
Delegate< T > self
Definition seadDelegate.h:97
Definition seadDelegate.h:266
void operator()(A a)
Definition seadDelegate.h:270
virtual void invoke(A a)=0
Definition seadDelegate.h:433
virtual void invoke(A1 a1, A2 a2)=0
void operator()(A1 a1, A2 a2)
Definition seadDelegate.h:437
Definition seadDelegate.h:81
virtual IDelegate * clone(Heap *) const =0
void operator()()
Definition seadDelegate.h:85
Definition seadDelegate.h:383
StaticDelegate1()
Definition seadDelegate.h:385
StaticDelegate1(typename Delegate1< void, A >::MethodPtr method)
Definition seadDelegate.h:390
Definition seadDelegate.h:550
StaticDelegate2(typename Delegate2< void, A1, A2 >::MethodPtr method)
Definition seadDelegate.h:557
StaticDelegate2()
Definition seadDelegate.h:552
Definition seadDelegate.h:217
StaticDelegate(typename Delegate< void >::MethodPtr m)
Definition seadDelegate.h:224
StaticDelegate()
Definition seadDelegate.h:219
Definition seadAssert.h:44
Delegate< void > FunctionDelegateCreator(void(*m)())
Definition seadDelegate.h:238
Delegate< T > DelegateCreator(T *obj, void(T::*m)())
Definition seadDelegate.h:232
Delegate1< void, A > FunctionDelegateCreator(void(*m)(A))
Definition seadDelegate.h:405
Delegate2< T, A1, A2 > DelegateCreator(T *obj, void(T::*m)(A1, A2))
Definition seadDelegate.h:565
Delegate2< void, A1, A2 > FunctionDelegateCreator(void(*m)(A1, A2))
Definition seadDelegate.h:572
Delegate1< T, A > DelegateCreator(T *obj, void(T::*m)(A))
Definition seadDelegate.h:398