OpenBarnyard
 
Loading...
Searching...
No Matches
TClass Class Reference

#include <TClass.h>

Public Types

using CreateObject_t = TObject* (*)()
 
using CreateObjectInPlace_t = TObject* (*)( void* a_pPtr )
 
using Initialise_t = void ( * )()
 
using Deinitialise_t = void ( * )()
 
using RecurseTreeCheck_t = TBOOL ( * )( TClass*, void* )
 
using RecurseTreeBaseBeginCb_t = void ( * )( TClass*, void* )
 
using RecurseTreeBaseEndCb_t = void ( * )( TClass*, void* )
 

Public Member Functions

 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)
 
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)
 
 ~TClass ()
 
void Initialize ()
 
void RecurseTree (RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
 
void RecurseTree2 (RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
 
class TObjectCreateObject () const
 
TBOOL IsA (TClass *pClass)
 
TBOOL IsExactly (TClass *toCompare) const
 
TBOOL IsInitialized () const
 
TClassGetParent ()
 
const TCHARGetName () const
 
TUINT16 GetVersionMajor () const
 
TUINT16 GetVersionMinor () const
 
TUINT32 GetMaxSizeOfDerivedClasses ()
 
TUINT32 GetMaxAlignmentOfDerivedClasses ()
 
TBOOL operator== (const TClass *other) const
 

Static Public Member Functions

static TBOOL TryInitialize (TClass *tClass)
 
static TClassFindRecurse (const TCHAR *const &name, TClass *parent, TBOOL hasPrevious)
 
static TClassFind (const TCHAR *name, TClass *parent=TNULL)
 

Detailed Description

Definition at line 7 of file TClass.h.

Member Typedef Documentation

◆ CreateObject_t

Definition at line 10 of file TClass.h.

◆ CreateObjectInPlace_t

using TClass::CreateObjectInPlace_t = TObject* (*)( void* a_pPtr )

Definition at line 11 of file TClass.h.

◆ Deinitialise_t

using TClass::Deinitialise_t = void ( * )()

Definition at line 13 of file TClass.h.

◆ Initialise_t

using TClass::Initialise_t = void ( * )()

Definition at line 12 of file TClass.h.

◆ RecurseTreeBaseBeginCb_t

using TClass::RecurseTreeBaseBeginCb_t = void ( * )( TClass*, void* )

Definition at line 16 of file TClass.h.

◆ RecurseTreeBaseEndCb_t

using TClass::RecurseTreeBaseEndCb_t = void ( * )( TClass*, void* )

Definition at line 17 of file TClass.h.

◆ RecurseTreeCheck_t

using TClass::RecurseTreeCheck_t = TBOOL ( * )( TClass*, void* )

Definition at line 15 of file TClass.h.

Constructor & Destructor Documentation

◆ TClass() [1/2]

TClass::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 at line 14 of file TClass.cpp.

15 : m_szName( a_szName ), m_pParent( a_pParentClass ), 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 )
16{
17 if ( m_pParent )
18 {
19 TClass* pClass = m_pParent->m_pLastChildren;
20
21 while ( pClass != TNULL )
22 {
23 if ( pClass == this ) return;
24 pClass = pClass->m_pPrevious;
25 }
26
27 m_pPrevious = m_pParent->m_pLastChildren;
28 m_pParent->m_pLastChildren = this;
29 }
30}
#define TNULL
Definition Typedefs.h:23
#define TFALSE
Definition Typedefs.h:24
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

◆ TClass() [2/2]

TClass::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 )
inlineconstexpr

Definition at line 33 of file TClass.h.

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 {}

◆ ~TClass()

TClass::~TClass ( )

Definition at line 32 of file TClass.cpp.

33{
34 m_pLastChildren = TNULL;
35 m_pPrevious = TNULL;
36 m_pParent = TNULL;
37
38 // Uninitialize static
39 if ( m_bInitialised && m_fnDeinitialise )
40 {
41 m_bInitialised = TFALSE;
42 m_fnDeinitialise();
43 }
44}

Member Function Documentation

◆ CreateObject()

TObject * TClass::CreateObject ( ) const

Definition at line 116 of file TClass.cpp.

117{
118 if ( m_fnCreate != TNULL )
119 {
120 return m_fnCreate();
121 }
122
123 return TNULL;
124}

◆ Find()

TClass * TClass::Find ( const TCHAR * name,
TClass * parent = TNULL )
static

Definition at line 110 of file TClass.cpp.

111{
112 if ( parent == TNULL ) parent = &TObject::TClassObjectName;
113 return FindRecurse( name, parent, TFALSE );
114}
static TClass * FindRecurse(const TCHAR *const &name, TClass *parent, TBOOL hasPrevious)
Definition TClass.cpp:82

◆ FindRecurse()

TClass * TClass::FindRecurse ( const TCHAR *const & name,
TClass * parent,
TBOOL hasPrevious )
static

Definition at line 82 of file TClass.cpp.

83{
84 while ( parent )
85 {
86 TClass* previous = hasPrevious ? parent->m_pPrevious : TNULL;
87 TINT difference = Toshi::TStringManager::String8CompareNoCase( parent->m_szName, name, -1 );
88
89 if ( difference == 0 )
90 {
91 return parent;
92 }
93
94 if ( parent->m_pLastChildren )
95 {
96 TClass* result = FindRecurse( name, parent->m_pLastChildren, TTRUE );
97
98 if ( result )
99 {
100 return result;
101 }
102 }
103
104 parent = previous;
105 }
106
107 return TNULL;
108}
int TINT
Definition Typedefs.h:7
#define TTRUE
Definition Typedefs.h:25

◆ GetMaxAlignmentOfDerivedClasses()

TUINT32 TClass::GetMaxAlignmentOfDerivedClasses ( )

Definition at line 170 of file TClass.cpp.

171{
172 auto GetMaxAlignmentOfClass = []( TClass* a_pClass, void* a_pAlignment ) -> TBOOL {
173 if ( *(TUINT32*)a_pAlignment < a_pClass->m_uiClassAlignment )
174 {
175 *(TUINT32*)a_pAlignment = a_pClass->m_uiClassAlignment;
176 }
177
178 return TTRUE;
179 };
180
181 TUINT32 uiAlignment = 0;
182 if ( GetMaxAlignmentOfClass( this, &uiAlignment ) )
183 {
184 RecurseTree2( TNULL, TNULL, GetMaxAlignmentOfClass, &uiAlignment );
185 }
186
187 return uiAlignment;
188}
uint32_t TUINT32
Definition Typedefs.h:13
bool TBOOL
Definition Typedefs.h:6
void RecurseTree2(RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
Definition TClass.cpp:67

◆ GetMaxSizeOfDerivedClasses()

TUINT32 TClass::GetMaxSizeOfDerivedClasses ( )

Definition at line 150 of file TClass.cpp.

151{
152 auto GetMaxSizeOfClass = []( TClass* a_pClass, void* a_pSize ) -> TBOOL {
153 if ( *(TUINT32*)a_pSize < a_pClass->m_uiClassSize )
154 {
155 *(TUINT32*)a_pSize = a_pClass->m_uiClassSize;
156 }
157
158 return TTRUE;
159 };
160
161 TUINT32 uiClassSize = 0;
162 if ( GetMaxSizeOfClass( this, &uiClassSize ) )
163 {
164 RecurseTree2( TNULL, TNULL, GetMaxSizeOfClass, &uiClassSize );
165 }
166
167 return uiClassSize;
168}

◆ GetName()

const TCHAR * TClass::GetName ( ) const
inline

Definition at line 58 of file TClass.h.

58{ return m_szName; }

◆ GetParent()

TClass * TClass::GetParent ( )
inline

Definition at line 57 of file TClass.h.

57{ return static_cast<TClass*>( m_pParent ); }

◆ GetVersionMajor()

TUINT16 TClass::GetVersionMajor ( ) const
inline

Definition at line 59 of file TClass.h.

59{ return m_uiVersionMajor; }

◆ GetVersionMinor()

TUINT16 TClass::GetVersionMinor ( ) const
inline

Definition at line 60 of file TClass.h.

60{ return m_uiVersionMinor; }

◆ Initialize()

void TClass::Initialize ( )

Definition at line 46 of file TClass.cpp.

47{
48 if ( m_fnInitialise )
49 {
50 m_fnInitialise();
51 m_bInitialised = TTRUE;
52 }
53}

◆ IsA()

TBOOL TClass::IsA ( TClass * pClass)

Definition at line 126 of file TClass.cpp.

127{
128 if ( cmpClass->m_pLastChildren == TNULL )
129 {
130 return ( this == cmpClass );
131 }
132 else
133 {
134 TClass* pClass = this;
135
136 while ( pClass != TNULL )
137 {
138 if ( pClass == cmpClass )
139 {
140 return TTRUE;
141 }
142
143 pClass = pClass->m_pParent;
144 }
145 }
146
147 return TFALSE;
148}

◆ IsExactly()

TBOOL TClass::IsExactly ( TClass * toCompare) const
inline

Definition at line 55 of file TClass.h.

55{ return this == toCompare; }

◆ IsInitialized()

TBOOL TClass::IsInitialized ( ) const
inline

Definition at line 56 of file TClass.h.

56{ return m_bInitialised; }

◆ operator==()

TBOOL TClass::operator== ( const TClass * other) const
inline

Definition at line 72 of file TClass.h.

72{ return this == other; }

◆ RecurseTree()

void TClass::RecurseTree ( RecurseTreeBaseBeginCb_t fBaseBegin,
RecurseTreeBaseEndCb_t fBaseEnd,
RecurseTreeCheck_t fCheck,
void * custom )

Definition at line 55 of file TClass.cpp.

56{
57 TBOOL valid = fCheck( this, custom );
58
59 if ( valid )
60 {
61 if ( fBaseBegin ) fBaseBegin( this, custom );
62 RecurseTree2( fBaseBegin, fBaseEnd, fCheck, custom );
63 if ( fBaseEnd ) fBaseEnd( this, custom );
64 }
65}

◆ RecurseTree2()

void TClass::RecurseTree2 ( RecurseTreeBaseBeginCb_t fBaseBegin,
RecurseTreeBaseEndCb_t fBaseEnd,
RecurseTreeCheck_t fCheck,
void * custom )

Definition at line 67 of file TClass.cpp.

68{
69 for ( TClass* pClass = m_pLastChildren; pClass != TNULL; pClass = pClass->m_pPrevious )
70 {
71 if ( fCheck ) fCheck( pClass, custom );
72
73 if ( pClass->m_pLastChildren )
74 {
75 if ( fBaseBegin ) fBaseBegin( pClass, custom );
76 pClass->RecurseTree2( fBaseBegin, fBaseEnd, fCheck, custom );
77 if ( fBaseEnd ) fBaseEnd( pClass, custom );
78 }
79 }
80}

◆ TryInitialize()

TBOOL TClass::TryInitialize ( TClass * tClass)
static

Definition at line 190 of file TClass.cpp.

191{
192 if ( !tClass->IsInitialized() )
193 {
194 tClass->Initialize();
195 }
196
197 return TTRUE;
198}
TBOOL IsInitialized() const
Definition TClass.h:56
void Initialize()
Definition TClass.cpp:46

The documentation for this class was generated from the following files: