deprecated Initialize/CleanUpClasses
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22629 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -105,11 +105,13 @@ public:
|
|||||||
( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) );
|
( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WXWIN_COMPATIBILITY_2_4
|
||||||
// Initializes parent pointers and hash table for fast searching.
|
// Initializes parent pointers and hash table for fast searching.
|
||||||
static void InitializeClasses();
|
wxDEPRECATED( static void InitializeClasses() );
|
||||||
|
|
||||||
// Cleans up hash table used for fast searching.
|
// Cleans up hash table used for fast searching.
|
||||||
static void CleanUpClasses();
|
wxDEPRECATED( static void CleanUpClasses() );
|
||||||
|
#endif
|
||||||
|
static void CleanUp();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const wxChar *m_className;
|
const wxChar *m_className;
|
||||||
@@ -145,6 +147,11 @@ protected:
|
|||||||
|
|
||||||
WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name);
|
WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name);
|
||||||
|
|
||||||
|
#ifdef WXWIN_COMPATIBILITY_2_4
|
||||||
|
inline void wxClassInfo::InitializeClasses() {}
|
||||||
|
inline void wxClassInfo::CleanUpClasses() {}
|
||||||
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Dynamic class macros
|
// Dynamic class macros
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -206,8 +206,6 @@ static void FreeConvertedArgs()
|
|||||||
// initialization which is always done (not customizable) before wxApp creation
|
// initialization which is always done (not customizable) before wxApp creation
|
||||||
static bool DoCommonPreInit()
|
static bool DoCommonPreInit()
|
||||||
{
|
{
|
||||||
wxClassInfo::InitializeClasses();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -331,7 +329,7 @@ static void DoCommonPreCleanup()
|
|||||||
// cleanup done after destroying wxTheApp
|
// cleanup done after destroying wxTheApp
|
||||||
static void DoCommonPostCleanup()
|
static void DoCommonPostCleanup()
|
||||||
{
|
{
|
||||||
wxClassInfo::CleanUpClasses();
|
wxClassInfo::CleanUp();
|
||||||
|
|
||||||
// we can't do this in wxApp itself because it doesn't know if argv had
|
// we can't do this in wxApp itself because it doesn't know if argv had
|
||||||
// been allocated
|
// been allocated
|
||||||
|
@@ -215,52 +215,31 @@ wxClassInfo *wxClassInfo::FindClass(const wxChar *className)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set pointers to base class(es) to speed up IsKindOf
|
void wxClassInfo::CleanUp()
|
||||||
void wxClassInfo::InitializeClasses()
|
|
||||||
{
|
{
|
||||||
|
if ( sm_classTable )
|
||||||
|
{
|
||||||
|
delete sm_classTable;
|
||||||
|
sm_classTable = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxClassInfo::Register()
|
||||||
|
{
|
||||||
|
if ( !sm_classTable )
|
||||||
|
{
|
||||||
|
sm_classTable = new wxHashTable(wxKEY_STRING);
|
||||||
|
}
|
||||||
|
|
||||||
// using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
|
// using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
|
||||||
// link any object module twice mistakenly) will break this function
|
// link any object module twice mistakenly) will break this function
|
||||||
// because it will enter an infinite loop and eventually die with "out of
|
// because it will enter an infinite loop and eventually die with "out of
|
||||||
// memory" - as this is quite hard to detect if you're unaware of this,
|
// memory" - as this is quite hard to detect if you're unaware of this,
|
||||||
// try to do some checks here
|
// try to do some checks here
|
||||||
|
wxASSERT_MSG( sm_classTable->Get(m_className) == NULL,
|
||||||
#ifdef __WXDEBUG__
|
_T("class already in RTTI table - have you used IMPLEMENT_DYNAMIC_CLASS() twice (may be by linking some object module(s) twice)?") );
|
||||||
static const size_t nMaxClasses = 10000; // more than we'll ever have
|
|
||||||
size_t nClass = 0;
|
sm_classTable->Put(m_className, (wxObject *)this);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Do this initialization only once, because classes are added
|
|
||||||
// automatically if
|
|
||||||
if ( sm_classTable == NULL )
|
|
||||||
{
|
|
||||||
sm_classTable = new wxHashTable(wxKEY_STRING);
|
|
||||||
|
|
||||||
// Index all class infos by their class name:
|
|
||||||
wxClassInfo *info;
|
|
||||||
for(info = sm_first; info; info = info->m_next)
|
|
||||||
{
|
|
||||||
if (info->m_className)
|
|
||||||
{
|
|
||||||
wxASSERT_MSG( ++nClass < nMaxClasses,
|
|
||||||
_T("an infinite loop detected - have you used IMPLEMENT_DYNAMIC_CLASS() twice (may be by linking some object module(s) twice)?") );
|
|
||||||
sm_classTable->Put(info->m_className, (wxObject *)info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxClassInfo::CleanUpClasses()
|
|
||||||
{
|
|
||||||
delete wxClassInfo::sm_classTable;
|
|
||||||
wxClassInfo::sm_classTable = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxClassInfo::Register()
|
|
||||||
{
|
|
||||||
if ( sm_classTable )
|
|
||||||
{
|
|
||||||
sm_classTable->Put(m_className, (wxObject *)this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxClassInfo::Unregister()
|
void wxClassInfo::Unregister()
|
||||||
@@ -268,6 +247,11 @@ void wxClassInfo::Unregister()
|
|||||||
if ( sm_classTable )
|
if ( sm_classTable )
|
||||||
{
|
{
|
||||||
sm_classTable->Delete(m_className);
|
sm_classTable->Delete(m_className);
|
||||||
|
if ( sm_classTable->GetCount() == 0 )
|
||||||
|
{
|
||||||
|
delete sm_classTable;
|
||||||
|
sm_classTable = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user