]> git.saurik.com Git - wxWidgets.git/commitdiff
deprecated Initialize/CleanUpClasses
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 6 Aug 2003 12:10:30 +0000 (12:10 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 6 Aug 2003 12:10:30 +0000 (12:10 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22629 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/object.h
src/common/init.cpp
src/common/object.cpp

index bdb127321bb1ad789a3d1c28044010717835b46e..23f2359656d84e6e160e3a3df64f96973722b064 100644 (file)
@@ -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
 // ----------------------------------------------------------------------------
index 0000d789a4f28b24e6e64ab78caf7cc80561b8d1..2fd5771f0437750a0cc27538753c7e415d37d608 100644 (file)
@@ -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
index 212f195a28956414c787e0f740a0a7cf5efbc7f9..9f6fccef06bdc03420aba09940367707c9322c55 100644 (file)
@@ -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()
 {
-    // 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 )
+    if ( sm_classTable )
     {
-        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);
-            }
-        }
+        delete sm_classTable;
+        sm_classTable = NULL;
     }
 }
 
-void wxClassInfo::CleanUpClasses()
-{
-    delete wxClassInfo::sm_classTable;
-    wxClassInfo::sm_classTable = NULL;
-}
-
 void wxClassInfo::Register()
 {
-    if ( sm_classTable )
+    if ( !sm_classTable )
     {
-        sm_classTable->Put(m_className, (wxObject *)this);
+        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
+    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;
+        }
     }
 }