X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/223d09f6b523aac674ef9b72a883dfa8d37c5d4e..92f5ff59ccde20a9395084bb29c281ed6831b1b1:/include/wx/object.h?ds=inline diff --git a/include/wx/object.h b/include/wx/object.h index 0b72a7243a..4603f3b123 100644 --- a/include/wx/object.h +++ b/include/wx/object.h @@ -52,42 +52,47 @@ typedef wxObject * (*wxObjectConstructorFn) (void); class WXDLLEXPORT wxClassInfo { - public: - wxClassInfo(wxChar *cName, wxChar *baseName1, wxChar *baseName2, int sz, wxObjectConstructorFn fn); +public: + wxClassInfo(const wxChar *cName, + const wxChar *baseName1, + const wxChar *baseName2, + int sz, + wxObjectConstructorFn fn); wxObject *CreateObject(void); - inline wxChar *GetClassName(void) const { return m_className; } - inline wxChar *GetBaseClassName1(void) const { return m_baseClassName1; } - inline wxChar *GetBaseClassName2(void) const { return m_baseClassName2; } - inline wxClassInfo* GetBaseClass1() const { return m_baseInfo1; } - inline wxClassInfo* GetBaseClass2() const { return m_baseInfo2; } - inline int GetSize(void) const { return m_objectSize; } - inline wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } - static inline wxClassInfo* GetFirst() { return sm_first; } - inline wxClassInfo* GetNext() const { return m_next; } - bool IsKindOf(wxClassInfo *info) const; + const wxChar *GetClassName() const { return m_className; } + const wxChar *GetBaseClassName1() const { return m_baseClassName1; } + const wxChar *GetBaseClassName2() const { return m_baseClassName2; } + const wxClassInfo* GetBaseClass1() const { return m_baseInfo1; } + const wxClassInfo* GetBaseClass2() const { return m_baseInfo2; } + int GetSize() const { return m_objectSize; } + wxObjectConstructorFn GetConstructor() const { return m_objectConstructor; } + static const wxClassInfo* GetFirst() { return sm_first; } + const wxClassInfo* GetNext() const { return m_next; } + bool IsKindOf(const wxClassInfo *info) const; - static wxClassInfo *FindClass(wxChar *c); + static wxClassInfo *FindClass(const wxChar *c); // Initializes parent pointers and hash table for fast searching. - static void InitializeClasses(void); + static void InitializeClasses(); // Cleans up hash table used for fast searching. - static void CleanUpClasses(void); + static void CleanUpClasses(); public: - wxChar* m_className; - wxChar* m_baseClassName1; - wxChar* m_baseClassName2; + const wxChar* m_className; + const wxChar* m_baseClassName1; + const wxChar* m_baseClassName2; int m_objectSize; wxObjectConstructorFn m_objectConstructor; // Pointers to base wxClassInfos: set in InitializeClasses - // called from wx_main.cc - wxClassInfo* m_baseInfo1; - wxClassInfo* m_baseInfo2; + const wxClassInfo* m_baseInfo1; + const wxClassInfo* m_baseInfo2; + // class info object live in a linked list: pointers to its head and the + // next element in it static wxClassInfo* sm_first; wxClassInfo* m_next; @@ -170,6 +175,28 @@ wxObject* WXDLLEXPORT_CTORFN wxConstructorFor##name(void) \ ? (className *)(obj) \ : (className *)0) +// The 'this' pointer is always true, so use this version to cast the this +// pointer and avoid compiler warnings. +#define wxDynamicThisCast(obj, className) \ + (((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 @@ -199,23 +226,30 @@ class WXDLLEXPORT wxObject #if defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING void * operator new (size_t size, wxChar * fileName = NULL, int lineNum = 0); - void operator delete (void * buf); +# if defined(__VISAGECPP__) +# if __DEBUG_ALLOC__ + void operator delete (void * buf,const char * _fname, size_t _line); +# endif //__DEBUG_ALLOC__ +# else // Everybody else + void operator delete (void * buf); +# endif // end of VISAGECPP // VC++ 6.0 -#if defined(__VISUALC__) && (__VISUALC__ >= 1200) - void operator delete(void *buf, char*, int); -#endif +# if defined(__VISUALC__) && (__VISUALC__ >= 1200) + void operator delete(void *buf, wxChar*, int); +# endif // Causes problems for VC++ -#if wxUSE_ARRAY_MEMORY_OPERATORS && !defined(__VISUALC__) && !defined( __MWERKS__) - void * operator new[] (size_t size, wxChar * fileName = NULL, int lineNum = 0); - void operator delete[] (void * buf); -#endif - -#ifdef __MWERKS__ - void * operator new[] (size_t size, wxChar * fileName , int lineNum = 0); - void operator delete[] (void * buf); -#endif +# if wxUSE_ARRAY_MEMORY_OPERATORS && !defined(__VISUALC__) && !defined( __MWERKS__) + void * operator new[] (size_t size, wxChar * fileName = NULL, int lineNum = 0); + void operator delete[] (void * buf); +# endif + +# ifdef __MWERKS__ + 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