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 )
19 TClass* pClass = m_pParent->m_pLastChildren;
21 while ( pClass !=
TNULL )
23 if ( pClass ==
this )
return;
24 pClass = pClass->m_pPrevious;
27 m_pPrevious = m_pParent->m_pLastChildren;
28 m_pParent->m_pLastChildren =
this;
34 m_pLastChildren =
TNULL;
39 if ( m_bInitialised && m_fnDeinitialise )
51 m_bInitialised =
TTRUE;
57 TBOOL valid = fCheck(
this, custom );
61 if ( fBaseBegin ) fBaseBegin(
this, custom );
63 if ( fBaseEnd ) fBaseEnd(
this, custom );
69 for (
TClass* pClass = m_pLastChildren; pClass !=
TNULL; pClass = pClass->m_pPrevious )
71 if ( fCheck ) fCheck( pClass, custom );
73 if ( pClass->m_pLastChildren )
75 if ( fBaseBegin ) fBaseBegin( pClass, custom );
76 pClass->RecurseTree2( fBaseBegin, fBaseEnd, fCheck, custom );
77 if ( fBaseEnd ) fBaseEnd( pClass, custom );
86 TClass* previous = hasPrevious ? parent->m_pPrevious :
TNULL;
87 TINT difference = Toshi::TStringManager::String8CompareNoCase( parent->m_szName, name, -1 );
89 if ( difference == 0 )
94 if ( parent->m_pLastChildren )
112 if ( parent ==
TNULL ) parent = &TObject::TClassObjectName;
118 if ( m_fnCreate !=
TNULL )
128 if ( cmpClass->m_pLastChildren ==
TNULL )
130 return (
this == cmpClass );
136 while ( pClass !=
TNULL )
138 if ( pClass == cmpClass )
143 pClass = pClass->m_pParent;
152 auto GetMaxSizeOfClass = [](
TClass* a_pClass,
void* a_pSize ) ->
TBOOL {
153 if ( *(
TUINT32*)a_pSize < a_pClass->m_uiClassSize )
155 *(
TUINT32*)a_pSize = a_pClass->m_uiClassSize;
162 if ( GetMaxSizeOfClass(
this, &uiClassSize ) )
172 auto GetMaxAlignmentOfClass = [](
TClass* a_pClass,
void* a_pAlignment ) ->
TBOOL {
173 if ( *(
TUINT32*)a_pAlignment < a_pClass->m_uiClassAlignment )
175 *(
TUINT32*)a_pAlignment = a_pClass->m_uiClassAlignment;
182 if ( GetMaxAlignmentOfClass(
this, &uiAlignment ) )
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
TObject *(*)() CreateObject_t
class TObject * CreateObject() const
TBOOL IsInitialized() const
static TClass * Find(const TCHAR *name, TClass *parent=TNULL)
void RecurseTree(RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
TBOOL(*)(TClass *, void *) RecurseTreeCheck_t
void(*)(TClass *, void *) RecurseTreeBaseEndCb_t
TBOOL IsA(TClass *pClass)
static TBOOL TryInitialize(TClass *tClass)
void(*)(TClass *, void *) RecurseTreeBaseBeginCb_t
TUINT32 GetMaxAlignmentOfDerivedClasses()
static TClass * FindRecurse(const TCHAR *const &name, TClass *parent, TBOOL hasPrevious)
void RecurseTree2(RecurseTreeBaseBeginCb_t fBaseBegin, RecurseTreeBaseEndCb_t fBaseEnd, RecurseTreeCheck_t fCheck, void *custom)
TUINT32 GetMaxSizeOfDerivedClasses()
TObject *(*)(void *a_pPtr) CreateObjectInPlace_t
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)