#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
// for wxObject::Dump
#include "wx/ioswrap.h"
+ #if defined(__VISAGECPP__)
+ // help with VA debugging
+ #define DEBUG_PRINTF(NAME) { static int raz=0; \
+ printf( #NAME " %i\n",raz); fflush(stdout); \
+ raz++; \
+ }
+ #else
+ #define DEBUG_PRINTF(NAME)
+ #endif
#endif
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;
+#if defined(__WXDEBUG__) && defined(__VISAGECPP__)
+ int wxObject::N = 0; // total number of objects
+ int wxObject::Nid = 0;// object serial counter
+#endif // __WXDEBUG__
+
+// These are here so we can avoid 'always true/false' warnings
+// by referring to these instead of TRUE/FALSE
+const bool wxTrue = TRUE;
+const bool wxFalse = FALSE;
+
/*
* wxWindows root object.
*/
#if wxUSE_SERIAL
m_serialObj = (wxObject_Serialize *)NULL;
#endif
+#if defined(__WXDEBUG__) && defined(__VISAGECPP__)
+ id = Nid++;
+ N++;
+// { printf("wxObject %i/%i \t",id,N);
+// }
+#endif
}
wxObject::~wxObject()
if (m_serialObj)
delete m_serialObj;
#endif
+#if defined(__WXDEBUG__) && defined(__VISAGECPP__)
+ N--;
+// { printf("~wxObject %i/%i \t",id,N);
+// }
+#endif //__WXDEBUG__
}
/*
return wxDebugAlloc(size, fileName, lineNum, TRUE);
}
+#if defined(__VISAGECPP__)
+# if __DEBUG_ALLOC__
+void wxObject::operator delete (void * buf,const char * _fname, size_t _line)
+{
+ wxDebugFree(buf);
+}
+# endif //__DEBUG_ALLOC__
+#else
void wxObject::operator delete (void * buf)
{
wxDebugFree(buf);
}
+#endif // __VISAGECPP__
// VC++ 6.0
#if defined(__VISUALC__) && (__VISUALC__ >= 1200)
-void wxObject::operator delete(void* pData, char* /* fileName */, int /* lineNum */)
+void wxObject::operator delete(void* pData, wxChar* /* fileName */, int /* lineNum */)
{
::operator delete(pData);
}
if (info == NULL)
return FALSE;
- // For some reason, when making/using a DLL, static data has to be included
- // in both the DLL and the application. This can lead to duplicate
- // wxClassInfo objects, so we have to test the name instead of the pointers.
- // PROBABLY NO LONGER TRUE now I've done DLL creation right.
- /*
-#if WXMAKINGDLL
-if (GetClassName() && info->GetClassName() && (wxStrcmp(GetClassName(), info->GetClassName()) == 0))
-return TRUE;
-#else
- */
if (this == info)
return TRUE;
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)?") );
+ _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);
}
wxObject *wxCreateDynamicObject(const wxChar *name)
{
+ DEBUG_PRINTF(wxObject *wxCreateDynamicObject)
+
if (wxClassInfo::sm_classTable)
{
wxClassInfo *info = (wxClassInfo *)wxClassInfo::sm_classTable->Get(name);
void wxObject::StoreObject( wxObjectOutputStream& stream )
{
+ DEBUG_PRINTF(wxObject::StoreObject)
+
wxString obj_name = wxString(GetClassInfo()->GetClassName()) + "_Serialize";
wxLibrary *lib = wxTheLibraries.LoadLibrary("wxserial");
void wxObject::LoadObject( wxObjectInputStream& stream )
{
+ DEBUG_PRINTF(wxObject::LoadObject)
+
wxString obj_name = wxString(GetClassInfo()->GetClassName()) + "_Serialize";
wxLibrary *lib = wxTheLibraries.LoadLibrary("wxserial");
void wxObject::Ref(const wxObject& clone)
{
+ DEBUG_PRINTF(wxObject::Ref)
// delete reference to old data
UnRef();
// reference new data
if ( !--m_refData->m_count )
delete m_refData;
-
m_refData = (wxObjectRefData *) NULL;
}
}
wxObjectRefData::~wxObjectRefData()
{
}
-
-// These are here so we can avoid 'always true/false' warnings
-// by referring to these instead of TRUE/FALSE
-const bool wxTrue = TRUE;
-const bool wxFalse = FALSE;