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) ) );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef WXWIN_COMPATIBILITY_2_4
 | 
			
		||||
    // Initializes parent pointers and hash table for fast searching.
 | 
			
		||||
    static void     InitializeClasses();
 | 
			
		||||
 | 
			
		||||
    wxDEPRECATED( static void     InitializeClasses() );
 | 
			
		||||
    // Cleans up hash table used for fast searching.
 | 
			
		||||
    static void     CleanUpClasses();
 | 
			
		||||
    wxDEPRECATED( static void     CleanUpClasses() );
 | 
			
		||||
#endif
 | 
			
		||||
    static void     CleanUp();
 | 
			
		||||
    
 | 
			
		||||
public:
 | 
			
		||||
    const wxChar            *m_className;
 | 
			
		||||
@@ -145,6 +147,11 @@ protected:
 | 
			
		||||
 | 
			
		||||
WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxChar *name);
 | 
			
		||||
 | 
			
		||||
#ifdef WXWIN_COMPATIBILITY_2_4
 | 
			
		||||
inline void wxClassInfo::InitializeClasses() {}
 | 
			
		||||
inline void wxClassInfo::CleanUpClasses() {}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
// Dynamic class macros
 | 
			
		||||
// ----------------------------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -206,8 +206,6 @@ static void FreeConvertedArgs()
 | 
			
		||||
// initialization which is always done (not customizable) before wxApp creation
 | 
			
		||||
static bool DoCommonPreInit()
 | 
			
		||||
{
 | 
			
		||||
    wxClassInfo::InitializeClasses();
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -331,7 +329,7 @@ static void DoCommonPreCleanup()
 | 
			
		||||
// cleanup done after destroying wxTheApp
 | 
			
		||||
static void DoCommonPostCleanup()
 | 
			
		||||
{
 | 
			
		||||
    wxClassInfo::CleanUpClasses();
 | 
			
		||||
    wxClassInfo::CleanUp();
 | 
			
		||||
 | 
			
		||||
    // we can't do this in wxApp itself because it doesn't know if argv had
 | 
			
		||||
    // been allocated
 | 
			
		||||
 
 | 
			
		||||
@@ -215,52 +215,31 @@ wxClassInfo *wxClassInfo::FindClass(const wxChar *className)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Set pointers to base class(es) to speed up IsKindOf
 | 
			
		||||
void wxClassInfo::InitializeClasses()
 | 
			
		||||
void wxClassInfo::CleanUp()
 | 
			
		||||
{
 | 
			
		||||
    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
 | 
			
		||||
    // link any object module twice mistakenly) will break this function
 | 
			
		||||
    // 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,
 | 
			
		||||
    // try to do some checks here
 | 
			
		||||
 | 
			
		||||
#ifdef __WXDEBUG__
 | 
			
		||||
    static const size_t nMaxClasses = 10000;    // more than we'll ever have
 | 
			
		||||
    size_t nClass = 0;
 | 
			
		||||
#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);
 | 
			
		||||
    }
 | 
			
		||||
    wxASSERT_MSG( sm_classTable->Get(m_className) == NULL,
 | 
			
		||||
                  _T("class already in RTTI table - have you used IMPLEMENT_DYNAMIC_CLASS() twice (may be by linking some object module(s) twice)?") );
 | 
			
		||||
    
 | 
			
		||||
    sm_classTable->Put(m_className, (wxObject *)this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void wxClassInfo::Unregister()
 | 
			
		||||
@@ -268,6 +247,11 @@ void wxClassInfo::Unregister()
 | 
			
		||||
    if ( sm_classTable )
 | 
			
		||||
    {
 | 
			
		||||
        sm_classTable->Delete(m_className);
 | 
			
		||||
        if ( sm_classTable->GetCount() == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            delete sm_classTable;
 | 
			
		||||
            sm_classTable = NULL;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user