]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/object.cpp
Catching up to latest thread changes
[wxWidgets.git] / src / common / object.cpp
index 8c1f4febb784b72dcd4e3cbbdd824a126a73a9f0..d70fdbd253b892e765869bfb8af542d410f5bc3e 100644 (file)
@@ -45,7 +45,7 @@
 #endif
 
 #if !USE_SHARED_LIBRARY
-wxClassInfo wxObject::sm_classwxObject((char *) "wxObject", (char *) NULL, (char *) NULL, (int ) sizeof(wxObject), (wxObjectConstructorFn) NULL);
+wxClassInfo wxObject::sm_classwxObject((wxChar *) wxT("wxObject"), (wxChar *) NULL, (wxChar *) NULL, (int ) sizeof(wxObject), (wxObjectConstructorFn) NULL);
 wxClassInfo* wxClassInfo::sm_first = (wxClassInfo *) NULL;
 wxHashTable* wxClassInfo::sm_classTable = (wxHashTable*) NULL;
 #endif
@@ -87,7 +87,23 @@ bool wxObject::IsKindOf(wxClassInfo *info) const
         return FALSE;
 }
 
-#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
+wxObject *wxObject::Clone() const
+{
+    wxObject *object = GetClassInfo()->CreateObject();
+    CopyObject(*object);
+    return object;
+}
+
+#ifdef __WXDEBUG__
+void wxObject::CopyObject(wxObject& object_dest) const
+#else // !Debug
+void wxObject::CopyObject(wxObject& WXUNUSED(object_dest)) const
+#endif // Debug/!Debug
+{
+    wxASSERT(object_dest.GetClassInfo()->IsKindOf(GetClassInfo()));
+}
+
+#if wxUSE_STD_IOSTREAM && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT)
 void wxObject::Dump(ostream& str)
 {
     if (GetClassInfo() && GetClassInfo()->GetClassName())
@@ -103,7 +119,7 @@ void wxObject::Dump(ostream& str)
 #undef new
 #endif
 
-void *wxObject::operator new (size_t size, char * fileName, int lineNum)
+void *wxObject::operator new (size_t size, wxChar * fileName, int lineNum)
 {
     return wxDebugAlloc(size, fileName, lineNum, TRUE);
 }
@@ -122,8 +138,8 @@ void wxObject::operator delete(void* pData, char* /* fileName */, int /* lineNum
 #endif
 
 // Cause problems for VC++ - crashes
-#if !defined(__VISUALC__) && wxUSE_ARRAY_MEMORY_OPERATORS
-void * wxObject::operator new[] (size_t size, char * fileName, int lineNum)
+#if (!defined(__VISUALC__) && wxUSE_ARRAY_MEMORY_OPERATORS ) || defined(__MWERKS__)
+void * wxObject::operator new[] (size_t size, wxChar * fileName, int lineNum)
 {
     return wxDebugAlloc(size, fileName, lineNum, TRUE, TRUE);
 }
@@ -140,7 +156,7 @@ void wxObject::operator delete[] (void * buf)
  * Class info: provides run-time class type information.
  */
 
-wxClassInfo::wxClassInfo(char *cName, char *baseName1, char *baseName2, int sz, wxObjectConstructorFn constr)
+wxClassInfo::wxClassInfo(wxChar *cName, wxChar *baseName1, wxChar *baseName2, int sz, wxObjectConstructorFn constr)
 {
     m_className = cName;
     m_baseClassName1 = baseName1;
@@ -164,12 +180,12 @@ wxObject *wxClassInfo::CreateObject()
         return (wxObject *) NULL;
 }
 
-wxClassInfo *wxClassInfo::FindClass(char *c)
+wxClassInfo *wxClassInfo::FindClass(wxChar *c)
 {
     wxClassInfo *p = sm_first;
     while (p)
     {
-        if (p && p->GetClassName() && strcmp(p->GetClassName(), c) == 0)
+        if (p && p->GetClassName() && wxStrcmp(p->GetClassName(), c) == 0)
             return p;
         p = p->m_next;
     }
@@ -189,7 +205,7 @@ bool wxClassInfo::IsKindOf(wxClassInfo *info) const
     // PROBABLY NO LONGER TRUE now I've done DLL creation right.
     /*
 #if WXMAKINGDLL
-if (GetClassName() && info->GetClassName() && (strcmp(GetClassName(), info->GetClassName()) == 0))
+if (GetClassName() && info->GetClassName() && (wxStrcmp(GetClassName(), info->GetClassName()) == 0))
 return TRUE;
 #else
      */
@@ -238,7 +254,7 @@ void wxClassInfo::CleanUpClasses()
     wxClassInfo::sm_classTable = NULL;
 }
 
-wxObject *wxCreateDynamicObject(const char *name)
+wxObject *wxCreateDynamicObject(const wxChar *name)
 {
     if (wxClassInfo::sm_classTable)
     {
@@ -253,13 +269,12 @@ wxObject *wxCreateDynamicObject(const char *name)
         wxClassInfo *info = wxClassInfo::sm_first;
         while (info)
         {
-            if (info->m_className && strcmp(info->m_className, name) == 0)
+            if (info->m_className && wxStrcmp(info->m_className, name) == 0)
                 return info->CreateObject();
             info = info->m_next;
         }
         return (wxObject*) NULL;
     }
-    return (wxObject*) NULL;
 }
 
 #if wxUSE_SERIAL
@@ -339,13 +354,15 @@ void wxObject::Ref(const wxObject& clone)
 
 void wxObject::UnRef()
 {
-    if (m_refData) {
-        assert(m_refData->m_count > 0);
-        --(m_refData->m_count);
-        if (m_refData->m_count == 0)
+    if ( m_refData )
+    {
+        wxASSERT_MSG( m_refData->m_count > 0, _T("invalid ref data count") );
+
+        if ( !--m_refData->m_count )
             delete m_refData;
+
+        m_refData = (wxObjectRefData *) NULL;
     }
-    m_refData = (wxObjectRefData *) NULL;
 }
 
 /*