OpenBarnyard
 
Loading...
Searching...
No Matches
TEvent.h
Go to the documentation of this file.
1#pragma once
2#include "TDList.h"
3
5
7
8class TGenericListener : public TPriList<TGenericListener>::TNode
9{
10public:
11 using t_Callback = TBOOL( __stdcall* )( void* a_pCaller, void* a_pOwner, void* a_pData );
12 friend class TGenericEmitter;
13
14public:
15 TGenericListener() = default;
17
18 void Connect( TGenericEmitter& a_rEmitter, void* a_pCaller, t_Callback a_pCallback, TINT a_iPriority );
19 void Disconnect();
20
21private:
22 void Execute( void* pOwner, void* pData );
23
24private:
25 void* m_pCaller = TNULL;
26 t_Callback m_pCallback = TNULL;
27};
28
30{
31public:
33 TGenericEmitter( void* a_pOwner );
34 ~TGenericEmitter() = default;
35
36 void Create( void* a_pOwner );
37 void Destroy();
38
39 void Throw( void* a_pData );
40
43
44public:
46 void* m_pOwner;
47};
48
49template <typename Owner, typename Data = Owner>
51{
52public:
53 TEmitter( Owner* owner )
54 : TGenericEmitter( owner ) {}
55
56 void Throw( Data* pData ) { TGenericEmitter::Throw( pData ); }
57 void Throw( Data&& data ) { TGenericEmitter::Throw( &data ); }
58
59 void Create( Owner* owner ) { TGenericEmitter::Create( owner ); }
61};
62
63template <typename Owner, typename Data, typename Caller>
65{
66public:
67 using t_CallerCallback = TBOOL( __stdcall* )( Caller* a_pCaller, Owner* a_pOwner, Data* a_pData );
68
69public:
70 void Connect( TGenericEmitter& a_rEmitter, Caller* a_pCaller, t_CallerCallback a_pCallback, TINT a_iPriority )
71 {
73 a_rEmitter,
74 a_pCaller,
75 TREINTERPRETCAST( t_Callback, a_pCallback ),
76 a_iPriority
77 );
78 }
79};
80
#define TREINTERPRETCAST(TYPE, VALUE)
Definition Defines.h:68
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
#define TNULL
Definition Typedefs.h:23
int TINT
Definition Typedefs.h:7
bool TBOOL
Definition Typedefs.h:6
void Disconnect()
Definition TEvent.cpp:20
void Connect(TGenericEmitter &a_rEmitter, void *a_pCaller, t_Callback a_pCallback, TINT a_iPriority)
Definition TEvent.cpp:11
TGenericListener()=default
TBOOL(__stdcall *)(void *a_pCaller, void *a_pOwner, void *a_pData) t_Callback
Definition TEvent.h:11
friend class TGenericEmitter
Definition TEvent.h:12
void Destroy()
Definition TEvent.cpp:37
~TGenericEmitter()=default
void Create(void *a_pOwner)
Definition TEvent.cpp:50
void Throw(void *a_pData)
Definition TEvent.cpp:55
const TPriList< TGenericListener > & GetListeners() const
Definition TEvent.h:42
TPriList< TGenericListener > m_Listeners
Definition TEvent.h:45
TPriList< TGenericListener > & GetListeners()
Definition TEvent.h:41
void * m_pOwner
Definition TEvent.h:46
void Throw(Data *pData)
Definition TEvent.h:56
void Create(Owner *owner)
Definition TEvent.h:59
void Throw(Data &&data)
Definition TEvent.h:57
TEmitter(Owner *owner)
Definition TEvent.h:53
void Destroy()
Definition TEvent.h:60
void Connect(TGenericEmitter &a_rEmitter, Caller *a_pCaller, t_CallerCallback a_pCallback, TINT a_iPriority)
Definition TEvent.h:70
TBOOL(__stdcall *)(Caller *a_pCaller, Owner *a_pOwner, Data *a_pData) t_CallerCallback
Definition TEvent.h:67