-// Set pointers to base class(es) to speed up IsKindOf
-void wxClassInfo::InitializeClasses()
-{
- // 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__
- // more classes than we'll ever have
- static const size_t nMaxClasses = 10000;
- size_t nClass = 0;
-#endif // Debug
-
- wxClassInfo::sm_classTable = new wxHashTable(wxKEY_STRING);
-
- // Index all class infos by their class name
- wxClassInfo *info = sm_first;
- while (info)
+ // Using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
+ // link any object module twice mistakenly, or link twice against wx shared
+ // library) 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( classTable->Get(m_className) == NULL,
+ wxString::Format
+ (
+ wxT("Class \"%s\" already in RTTI table - have you used IMPLEMENT_DYNAMIC_CLASS() multiple times or linked some object file twice)?"),
+ m_className
+ )
+ );
+
+ classTable->Put(m_className, (wxObject *)this);
+
+ // if we're using a local hash we need to try to make it global
+ if ( sm_classTable != classTable )