X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/415ca026b4d66c4c43ef5724dbf2072ad433eb1f..33754c4d83c59b7523a6da0c4fb21079cb60301c:/src/common/object.cpp?ds=sidebyside diff --git a/src/common/object.cpp b/src/common/object.cpp index 08d68a2180..20e531a1f2 100644 --- a/src/common/object.cpp +++ b/src/common/object.cpp @@ -32,6 +32,11 @@ #endif // wxUSE_SERIAL #endif // WX_PRECOMP +#ifdef __VISAGECPP__ + #include "wx/objstrm.h" + #include "wx/serbase.h" +#endif + #include #include @@ -57,11 +62,6 @@ wxClassInfo wxObject::sm_classwxObject((wxChar *) wxT("wxObject"), (wxChar *) NU 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; @@ -77,12 +77,6 @@ wxObject::wxObject() #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() @@ -92,11 +86,6 @@ wxObject::~wxObject() if (m_serialObj) delete m_serialObj; #endif -#if defined(__WXDEBUG__) && defined(__VISAGECPP__) - N--; -// { printf("~wxObject %i/%i \t",id,N); -// } -#endif //__WXDEBUG__ } /* @@ -115,24 +104,8 @@ bool wxObject::IsKindOf(wxClassInfo *info) const 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(); @@ -193,7 +166,11 @@ void wxObject::operator delete[] (void * buf) * 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; @@ -217,21 +194,23 @@ wxObject *wxClassInfo::CreateObject() 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; @@ -300,7 +279,9 @@ void wxClassInfo::CleanUpClasses() wxObject *wxCreateDynamicObject(const wxChar *name) { +#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT DEBUG_PRINTF(wxObject *wxCreateDynamicObject) +#endif if (wxClassInfo::sm_classTable) { @@ -336,7 +317,9 @@ wxObject* wxCreateStoredObject( wxInputStream &stream ) 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"); @@ -363,7 +346,9 @@ void wxObject::StoreObject( wxObjectOutputStream& stream ) 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"); @@ -392,8 +377,10 @@ void wxObject::LoadObject( wxObjectInputStream& stream ) void wxObject::Ref(const wxObject& clone) { +#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT DEBUG_PRINTF(wxObject::Ref) - // delete reference to old data +#endif + // delete reference to old data UnRef(); // reference new data if (clone.m_refData) { @@ -425,3 +412,26 @@ wxObjectRefData::wxObjectRefData(void) : m_count(1) 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