]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/object.cpp
Added some notes on the Nano-X port.
[wxWidgets.git] / src / common / object.cpp
index d502615e2717b5ebc310b1aaf127b8a294ebdfbf..ab3ef77b87633d04a4ed8840a4c71be2500d0172 100644 (file)
@@ -151,8 +151,22 @@ wxClassInfo *wxClassInfo::FindClass(const wxChar *className)
     }
 }
 
-    // Set pointers to base class(es) to speed up IsKindOf
+// a tiny InitializeClasses() helper
+/* static */
+inline wxClassInfo *wxClassInfo::GetBaseByName(const wxChar *name)
+{
+    if ( !name )
+        return NULL;
+
+    wxClassInfo *classInfo = (wxClassInfo *)sm_classTable->Get(name);
 
+    // this must be fixed, other things risk work wrongly later if you get this
+    wxASSERT_MSG( classInfo, _T("base class unknown to wxWindows RTTI") );
+
+    return classInfo;
+}
+
+// Set pointers to base class(es) to speed up IsKindOf
 void wxClassInfo::InitializeClasses()
 {
     // using IMPLEMENT_DYNAMIC_CLASS() macro twice (which may happen if you
@@ -185,10 +199,8 @@ void wxClassInfo::InitializeClasses()
 
     for(info = sm_first; info; info = info->m_next)
     {
-        if (info->GetBaseClassName1())
-            info->m_baseInfo1 = (wxClassInfo *)sm_classTable->Get(info->GetBaseClassName1());
-        if (info->GetBaseClassName2())
-            info->m_baseInfo2 = (wxClassInfo *)sm_classTable->Get(info->GetBaseClassName2());
+        info->m_baseInfo1 = GetBaseByName(info->GetBaseClassName1());
+        info->m_baseInfo2 = GetBaseByName(info->GetBaseClassName2());
     }
 }
 
@@ -230,6 +242,10 @@ void wxObject::Ref(const wxObject& clone)
     DEBUG_PRINTF(wxObject::Ref)
 #endif
 
+    // nothing to be done
+    if (m_refData == clone.m_refData)
+        return;
+
     // delete reference to old data
     UnRef();
 
@@ -262,7 +278,7 @@ void wxObject::AllocExclusive()
     else if ( m_refData->GetRefCount() > 1 )
     {
         // note that ref is not going to be destroyed in this case
-        wxObjectRefData* ref = m_refData;
+        const wxObjectRefData* ref = m_refData;
         UnRef();
 
         // ... so we can still access it
@@ -276,11 +292,18 @@ void wxObject::AllocExclusive()
 
 wxObjectRefData *wxObject::CreateRefData() const
 {
+    // if you use AllocExclusive() you must override this method
+    wxFAIL_MSG( _T("CreateRefData() must be overridden if called!") );
+
     return NULL;
 }
 
-wxObjectRefData *wxObject::CloneRefData(wxObjectRefData * WXUNUSED(data)) const
+wxObjectRefData *
+wxObject::CloneRefData(const wxObjectRefData * WXUNUSED(data)) const
 {
+    // if you use AllocExclusive() you must override this method
+    wxFAIL_MSG( _T("CloneRefData() must be overridden if called!") );
+
     return NULL;
 }