#endif // wxUSE_SERIAL
#endif // WX_PRECOMP
+#ifdef __VISAGECPP__
+ #include "wx/objstrm.h"
+ #include "wx/serbase.h"
+#endif
+
#include <string.h>
#include <assert.h>
#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);
return FALSE;
}
-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)
+void wxObject::Dump(wxSTD ostream& str)
{
if (GetClassInfo() && GetClassInfo()->GetClassName())
str << GetClassInfo()->GetClassName();
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)
* Class info: provides run-time class type information.
*/
-wxClassInfo::wxClassInfo(wxChar *cName, wxChar *baseName1, wxChar *baseName2, int sz, wxObjectConstructorFn constr)
+wxClassInfo::wxClassInfo(const wxChar *cName,
+ const wxChar *baseName1,
+ const wxChar *baseName2,
+ int sz,
+ wxObjectConstructorFn constr)
{
m_className = cName;
m_baseClassName1 = baseName1;
return (wxObject *) NULL;
}
-wxClassInfo *wxClassInfo::FindClass(wxChar *c)
+wxClassInfo *wxClassInfo::FindClass(const wxChar *c)
{
wxClassInfo *p = sm_first;
while (p)
{
- if (p && p->GetClassName() && wxStrcmp(p->GetClassName(), c) == 0)
- return p;
+ if ( wxStrcmp(p->GetClassName(), c) == 0 )
+ break;
+
p = p->m_next;
}
- return (wxClassInfo *) NULL;
+
+ return p;
}
// Climb upwards through inheritance hierarchy.
// Dual inheritance is catered for.
-bool wxClassInfo::IsKindOf(wxClassInfo *info) const
+bool wxClassInfo::IsKindOf(const wxClassInfo *info) const
{
if (info == NULL)
return FALSE;
wxObject *wxCreateDynamicObject(const wxChar *name)
{
+#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
+ DEBUG_PRINTF(wxObject *wxCreateDynamicObject)
+#endif
+
if (wxClassInfo::sm_classTable)
{
wxClassInfo *info = (wxClassInfo *)wxClassInfo::sm_classTable->Get(name);
void wxObject::StoreObject( wxObjectOutputStream& stream )
{
+#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
+ DEBUG_PRINTF(wxObject::StoreObject)
+#endif
+
wxString obj_name = wxString(GetClassInfo()->GetClassName()) + "_Serialize";
wxLibrary *lib = wxTheLibraries.LoadLibrary("wxserial");
void wxObject::LoadObject( wxObjectInputStream& stream )
{
+#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
+ DEBUG_PRINTF(wxObject::LoadObject)
+#endif
+
wxString obj_name = wxString(GetClassInfo()->GetClassName()) + "_Serialize";
wxLibrary *lib = wxTheLibraries.LoadLibrary("wxserial");
void wxObject::Ref(const wxObject& clone)
{
- // delete reference to old data
+#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT
+ DEBUG_PRINTF(wxObject::Ref)
+#endif
+ // delete reference to old data
UnRef();
// reference new data
if (clone.m_refData) {
wxObjectRefData::~wxObjectRefData()
{
}
+
+#if defined(__DARWIN__) && defined(DYLIB_INIT)
+
+extern "C" {
+ void __initialize_Cplusplus(void);
+ void wxWindowsDylibInit(void);
+};
+
+// Dynamic shared library (dylib) initialization routine
+// required to initialize static C++ objects bacause of lazy dynamic linking
+// http://developer.apple.com/techpubs/macosx/Essentials/
+// SystemOverview/Frameworks/Dynamic_Shared_Libraries.html
+//
+void wxWindowsDylibInit()
+{
+ // The function __initialize_Cplusplus() must be called from the shared
+ // library initialization routine to cause the static C++ objects in
+ // the library to be initialized (reference number 2441683).
+
+ __initialize_Cplusplus();
+}
+
+#endif