X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aadbdf11bda695e2ca135ef1e4dc09d6c01d2521..22e0ea84c89c61cceb3deb2b62145afa047a0dff:/include/wx/object.h diff --git a/include/wx/object.h b/include/wx/object.h index 61c34c41ec..458f5e78e6 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -40,14 +40,8 @@ class WXDLLEXPORT wxObjectOutputStream; class WXDLLEXPORT wxHashTable; class WXDLLEXPORT wxObject_Serialize; -#if wxUSE_IOSTREAMH - // N.B. BC++ doesn't have istream.h, ostream.h -# include -#else -# include -# if defined(__VISUALC__) || defined(__MWERKS__) - using namespace std; -# endif +#if wxUSE_STD_IOSTREAM && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT) + #include "wx/ioswrap.h" #endif /* @@ -123,13 +117,13 @@ WXDLLEXPORT wxObject* wxCreateStoredObject( wxInputStream& stream ); #define IMPLEMENT_DYNAMIC_CLASS(name, basename) \ wxObject* WXDLLEXPORT_CTORFN wxConstructorFor##name(void) \ { return new name; }\ - wxClassInfo name::sm_class##name((wxChar *) _T(#name), (wxChar *) _T(#basename), (wxChar *) NULL, (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name); + wxClassInfo name::sm_class##name((wxChar *) wxT(#name), (wxChar *) wxT(#basename), (wxChar *) NULL, (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name); // Multiple inheritance with two base classes #define IMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) \ wxObject* WXDLLEXPORT_CTORFN wxConstructorFor##name(void) \ { return new name; }\ - wxClassInfo name::sm_class##name((wxChar *) _T(#name), (wxChar *) _T(#basename1), (wxChar *) _T(#basename2), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name); + wxClassInfo name::sm_class##name((wxChar *) wxT(#name), (wxChar *) wxT(#basename1), (wxChar *) wxT(#basename2), (int) sizeof(name), (wxObjectConstructorFn) wxConstructorFor##name); ////// ////// for abstract classes @@ -137,20 +131,20 @@ wxObject* WXDLLEXPORT_CTORFN wxConstructorFor##name(void) \ // Single inheritance with one base class #define IMPLEMENT_ABSTRACT_CLASS(name, basename) \ - wxClassInfo name::sm_class##name((wxChar *) _T(#name), (wxChar *) _T(#basename), \ - (wxChar *) NULL, (int) sizeof(name), (wxObjectConstructorFn) NULL); + wxClassInfo name::sm_class##name((wxChar *) wxT(#name), (wxChar *) wxT(#basename), \ + (wxChar *) NULL, (int) sizeof(name), (wxObjectConstructorFn) NULL); // Multiple inheritance with two base classes #define IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \ - wxClassInfo name::sm_class##name((wxChar *) _T(#name), (wxChar *) _T(#basename1), \ - (wxChar *) _T(#basename2), (int) sizeof(name), (wxObjectConstructorFn) NULL); + wxClassInfo name::sm_class##name((wxChar *) wxT(#name), (wxChar *) wxT(#basename1), \ + (wxChar *) wxT(#basename2), (int) sizeof(name), (wxObjectConstructorFn) NULL); #define IMPLEMENT_CLASS IMPLEMENT_ABSTRACT_CLASS #define IMPLEMENT_CLASS2 IMPLEMENT_ABSTRACT_CLASS2 #define CLASSINFO(name) (&name::sm_class##name) -#else +#else // !wxUSE_DYNAMIC_CLASSES // No dynamic class system: so stub out the macros #define DECLARE_DYNAMIC_CLASS(name) @@ -163,20 +157,41 @@ wxObject* WXDLLEXPORT_CTORFN wxConstructorFor##name(void) \ #define IMPLEMENT_CLASS IMPLEMENT_ABSTRACT_CLASS #define IMPLEMENT_CLASS2 IMPLEMENT_ABSTRACT_CLASS2 -#endif +#endif // wxUSE_DYNAMIC_CLASSES/!wxUSE_DYNAMIC_CLASSES #define wxIS_KIND_OF(obj, className) obj->IsKindOf(&className::sm_class##className) // Just seems a bit nicer-looking (pretend it's not a macro) #define wxIsKindOf(obj, className) obj->IsKindOf(&className::sm_class##className) +// to be replaced by dynamic_cast<> in the future +#define wxDynamicCast(obj, className) \ + ((obj) && ((obj)->IsKindOf(&className::sm_class##className)) \ + ? (className *)(obj) \ + : (className *)0) + +#define wxConstCast(obj, className) ((className *)(obj)) + +#ifdef __WXDEBUG__ + inline void wxCheckCast(void *ptr) + { + wxASSERT_MSG( ptr, _T("wxStaticCast() used incorrectly") ); + } + + #define wxStaticCast(obj, className) \ + (wxCheckCast(wxDynamicCast(obj, className)), ((className *)(obj))) + +#else // !Debug + #define wxStaticCast(obj, className) ((className *)(obj)) +#endif // Debug/!Debug + // Unfortunately Borland seems to need this include. #ifdef __BORLANDC__ -#if wxUSE_IOSTREAMH -#include -#else -#include -#endif + #if wxUSE_IOSTREAMH + #include + #else + #include + #endif #endif class WXDLLEXPORT wxObjectRefData; @@ -199,11 +214,19 @@ class WXDLLEXPORT wxObject #if defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING void * operator new (size_t size, wxChar * fileName = NULL, int lineNum = 0); + +#if defined(__VISAGECPP__) + #if __DEBUG_ALLOC__ + void operator delete (void * buf,const char * _fname, size_t _line); + #endif //__DEBUG_ALLOC__ +#else void operator delete (void * buf); +#endif + // defined(__VISAGECPP__) // VC++ 6.0 #if defined(__VISUALC__) && (__VISUALC__ >= 1200) - void operator delete(void *buf, char*, int); + void operator delete(void *buf, wxChar*, int); #endif // Causes problems for VC++ @@ -213,13 +236,14 @@ class WXDLLEXPORT wxObject #endif #ifdef __MWERKS__ - void * operator new[] (size_t size, wxChar * fileName , int lineNum = 0); + void * operator new[] (size_t size, wxChar * fileName , int lineNum = 0); + void * operator new[] (size_t size) { return operator new[] ( size , NULL , 0 ) ; } void operator delete[] (void * buf); #endif #endif // Debug & memory tracing -#if defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT +#if wxUSE_STD_IOSTREAM && (defined(__WXDEBUG__) || wxUSE_DEBUG_CONTEXT) virtual void Dump(ostream& str); #endif @@ -237,6 +261,14 @@ class WXDLLEXPORT wxObject inline wxObjectRefData *GetRefData(void) const { return m_refData; } inline void SetRefData(wxObjectRefData *data) { m_refData = data; } +//EK +#if defined(__WXDEBUG__) && defined(__VISAGECPP__) +public: + static int N; + static int Nid; // total number of objects and serial counter + int id; // serial number for current object +#endif // __WXDEBUG__ + protected: wxObjectRefData* m_refData; #if wxUSE_SERIAL