OpenBarnyard
 
Loading...
Searching...
No Matches
TClass.h
Go to the documentation of this file.
1#pragma once
2
4
5class TObject;
6
7class TClass
8{
9public:
10 using CreateObject_t = TObject* (*)();
11 using CreateObjectInPlace_t = TObject* (*)( void* a_pPtr );
12 using Initialise_t = void ( * )();
13 using Deinitialise_t = void ( * )();
14
15 using RecurseTreeCheck_t = TBOOL ( * )( TClass*, void* );
16 using RecurseTreeBaseBeginCb_t = void ( * )( TClass*, void* );
17 using RecurseTreeBaseEndCb_t = void ( * )( TClass*, void* );
18
19public:
20 TClass(
21 const TCHAR* a_szName,
22 TClass* a_pParentClass,
23 CreateObject_t a_fnCreate,
24 CreateObjectInPlace_t a_fnCreateInPlace,
25 Initialise_t a_fnInitialise,
26 Deinitialise_t a_fnUnitialise,
27 TUINT16 a_uiVersionMajor,
28 TUINT16 a_uiVersionMinor,
29 TUINT32 a_uiClassSize,
30 TUINT32 a_uiClassAlignment
31 );
32
33 constexpr TClass(
34 const TCHAR* a_szName,
35 CreateObject_t a_fnCreate,
36 CreateObjectInPlace_t a_fnCreateInPlace,
37 Initialise_t a_fnInitialise,
38 Deinitialise_t a_fnUnitialise,
39 TUINT16 a_uiVersionMajor,
40 TUINT16 a_uiVersionMinor,
41 TUINT32 a_uiClassSize,
42 TUINT32 a_uiClassAlignment
43 )
44 : m_szName( a_szName ), m_pParent( TNULL ), m_pPrevious( TNULL ), m_pLastChildren( TNULL ), m_fnCreate( a_fnCreate ), m_fnCreateInPlace( a_fnCreateInPlace ), m_fnInitialise( a_fnInitialise ), m_fnDeinitialise( a_fnUnitialise ), m_uiVersionMajor( a_uiVersionMajor ), m_uiVersionMinor( a_uiVersionMinor ), m_uiClassSize( a_uiClassSize ), m_uiClassAlignment( a_uiClassAlignment ), m_bInitialised( TFALSE )
45 {}
46
47 ~TClass();
48
49 void Initialize();
50 void RecurseTree( RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void* custom );
51 void RecurseTree2( RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void* custom );
52 class TObject* CreateObject() const;
53
54 TBOOL IsA( TClass* pClass );
55 TBOOL IsExactly( TClass* toCompare ) const { return this == toCompare; }
56 TBOOL IsInitialized() const { return m_bInitialised; }
57 TClass* GetParent() { return static_cast<TClass*>( m_pParent ); }
58 const TCHAR* GetName() const { return m_szName; }
59 TUINT16 GetVersionMajor() const { return m_uiVersionMajor; }
60 TUINT16 GetVersionMinor() const { return m_uiVersionMinor; }
63
64 // todo: move this function away from this class
65 static TBOOL TryInitialize( TClass* tClass );
66
67 // Looks for a class in parent
68 static TClass* FindRecurse( const TCHAR* const& name, TClass* parent, TBOOL hasPrevious );
69 static TClass* Find( const TCHAR* name, TClass* parent = TNULL );
70
71public:
72 inline TBOOL operator==( const TClass* other ) const { return this == other; }
73
74private:
75 const TCHAR* m_szName; // 0x00
76 CreateObject_t m_fnCreate; // 0x04
77 CreateObjectInPlace_t m_fnCreateInPlace; // 0x08
78 Initialise_t m_fnInitialise; // 0x0C
79 Deinitialise_t m_fnDeinitialise; // 0x10
80 TClass* m_pParent; // 0x14
81 TClass* m_pPrevious; // 0x18
82 TClass* m_pLastChildren; // 0x1C
83 TUINT16 m_uiVersionMajor; // 0x20
84 TUINT16 m_uiVersionMinor; // 0x22
85 TUINT32 m_uiClassSize; // 0x24
86 TUINT32 m_uiClassAlignment; // 0x28
87 TBOOL m_bInitialised; // 0x2C
88};
89
#define TOSHI_NAMESPACE_START
Definition Defines.h:47
#define TOSHI_NAMESPACE_END
Definition Defines.h:50
uint16_t TUINT16
Definition Typedefs.h:15
char TCHAR
Definition Typedefs.h:20
#define TNULL
Definition Typedefs.h:23
uint32_t TUINT32
Definition Typedefs.h:13
#define TFALSE
Definition Typedefs.h:24
bool TBOOL
Definition Typedefs.h:6
Definition TClass.h:8
TObject *(*)() CreateObject_t
Definition TClass.h:10
class TObject * CreateObject() const
Definition TClass.cpp:116
constexpr TClass(const TCHAR *a_szName, CreateObject_t a_fnCreate, CreateObjectInPlace_t a_fnCreateInPlace, Initialise_t a_fnInitialise, Deinitialise_t a_fnUnitialise, TUINT16 a_uiVersionMajor, TUINT16 a_uiVersionMinor, TUINT32 a_uiClassSize, TUINT32 a_uiClassAlignment)
Definition TClass.h:33
TBOOL IsInitialized() const
Definition TClass.h:56
TUINT16 GetVersionMinor() const
Definition TClass.h:60
~TClass()
Definition TClass.cpp:32
TUINT16 GetVersionMajor() const
Definition TClass.h:59
static TClass * Find(const TCHAR *name, TClass *parent=TNULL)
Definition TClass.cpp:110
void(*)() Initialise_t
Definition TClass.h:12
void(*)() Deinitialise_t
Definition TClass.h:13
void RecurseTree(RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
Definition TClass.cpp:55
void Initialize()
Definition TClass.cpp:46
TBOOL(*)(TClass *, void *) RecurseTreeCheck_t
Definition TClass.h:15
TClass * GetParent()
Definition TClass.h:57
void(*)(TClass *, void *) RecurseTreeBaseEndCb_t
Definition TClass.h:17
TBOOL IsExactly(TClass *toCompare) const
Definition TClass.h:55
TBOOL operator==(const TClass *other) const
Definition TClass.h:72
TBOOL IsA(TClass *pClass)
Definition TClass.cpp:126
static TBOOL TryInitialize(TClass *tClass)
Definition TClass.cpp:190
void(*)(TClass *, void *) RecurseTreeBaseBeginCb_t
Definition TClass.h:16
TUINT32 GetMaxAlignmentOfDerivedClasses()
Definition TClass.cpp:170
static TClass * FindRecurse(const TCHAR *const &name, TClass *parent, TBOOL hasPrevious)
Definition TClass.cpp:82
const TCHAR * GetName() const
Definition TClass.h:58
void RecurseTree2(RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
Definition TClass.cpp:67
TUINT32 GetMaxSizeOfDerivedClasses()
Definition TClass.cpp:150
TObject *(*)(void *a_pPtr) CreateObjectInPlace_t
Definition TClass.h:11
TClass(const TCHAR *a_szName, TClass *a_pParentClass, CreateObject_t a_fnCreate, CreateObjectInPlace_t a_fnCreateInPlace, Initialise_t a_fnInitialise, Deinitialise_t a_fnUnitialise, TUINT16 a_uiVersionMajor, TUINT16 a_uiVersionMinor, TUINT32 a_uiClassSize, TUINT32 a_uiClassAlignment)
Definition TClass.cpp:14