X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b5dbe15d0bacde245539f54c4d97af6b4696f01f..09b895cb4a954494063eb17d3dc302a654fd99e5:/include/wx/list.h?ds=sidebyside diff --git a/include/wx/list.h b/include/wx/list.h index 0694f7efeb..a09bc6158d 100644 --- a/include/wx/list.h +++ b/include/wx/list.h @@ -22,8 +22,8 @@ like the old class. */ -#ifndef _WX_LISTH__ -#define _WX_LISTH__ +#ifndef _WX_LIST_H_ +#define _WX_LIST_H_ // ----------------------------------------------------------------------------- // headers @@ -80,7 +80,7 @@ typedef int (* LINKAGEMODE wxListIterateFunction)(void *current); #if !defined(__VISUALC__) || __VISUALC__ >= 1300 // == !VC6 template -class WXDLLIMPEXP_BASE wxList_SortFunction +class wxList_SortFunction { public: wxList_SortFunction(wxSortCompareFunction f) : m_f(f) { } @@ -91,12 +91,12 @@ private: }; #define WX_LIST_SORTFUNCTION( elT, f ) wxList_SortFunction(f) -#define VC6_WORKAROUND(elT, liT, decl) +#define WX_LIST_VC6_WORKAROUND(elT, liT, decl) #else // if defined( __VISUALC__ ) && __VISUALC__ < 1300 // == VC6 #define WX_LIST_SORTFUNCTION( elT, f ) std::greater( f ) -#define VC6_WORKAROUND(elT, liT, decl) \ +#define WX_LIST_VC6_WORKAROUND(elT, liT, decl) \ decl liT; \ \ /* Workaround for broken VC6 STL incorrectly requires a std::greater<> */ \ @@ -131,7 +131,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) for mingw 3.2.3 compiler bug that prevents a static function of liT class from being exported into dll. A minimal code snippet reproducing the bug: - struct WXDLLEXPORT Foo + struct WXDLLIMPEXP_CORE Foo { static void Bar(); struct SomeInnerClass @@ -164,7 +164,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) static void DeleteFunction( _WX_LIST_ITEM_TYPE_##liT X ); \ }; \ \ - VC6_WORKAROUND(elT, liT, decl) \ + WX_LIST_VC6_WORKAROUND(elT, liT, decl) \ decl liT : public std::list \ { \ private: \ @@ -333,7 +333,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) ~liT() { Clear(); } \ \ /* It needs access to our EmptyList */ \ - friend decl compatibility_iterator; \ + friend class compatibility_iterator; \ } #define WX_DECLARE_LIST(elementtype, listname) \ @@ -342,7 +342,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) WX_DECLARE_LIST(elementtype, listname) #define WX_DECLARE_EXPORTED_LIST(elementtype, listname) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLEXPORT) + WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLIMPEXP_CORE) #define WX_DECLARE_EXPORTED_LIST_PTR(elementtype, listname) \ WX_DECLARE_EXPORTED_LIST(elementtype, listname) @@ -469,7 +469,7 @@ protected: virtual void DeleteData() { } public: // for wxList::iterator - void** GetDataPtr() const { return &(((wxNodeBase*)this)->m_data); } + void** GetDataPtr() const { return &(wx_const_cast(wxNodeBase*, this)->m_data); } private: // optional key stuff wxListKeyValue m_key; @@ -489,9 +489,9 @@ private: class WXDLLIMPEXP_FWD_BASE wxList; -class WXDLLIMPEXP_BASE wxListBase : public wxObject +class WXDLLIMPEXP_BASE wxListBase { -friend class WXDLLIMPEXP_FWD_BASE wxNodeBase; // should be able to call DetachNode() +friend class wxNodeBase; // should be able to call DetachNode() friend class wxHashTableBase; // should be able to call untyped Find() public: @@ -548,10 +548,6 @@ protected: void *data, const wxListKey& key = wxDefaultListKey) = 0; -// Can't access these from derived classes otherwise (bug in Salford C++?) -#ifdef __SALFORDC__ -public: -#endif // ctors // from an array @@ -736,7 +732,7 @@ private: : wxListBase(count, (void **)elements) { } \ \ name& operator=(const name& list) \ - { Assign(list); return *this; } \ + { if (&list != this) Assign(list); return *this; } \ \ nodetype *GetFirst() const \ { return (nodetype *)wxListBase::GetFirst(); } \ @@ -1101,11 +1097,11 @@ private: WX_DECLARE_LIST_2(elementtype, listname, wx##listname##Node, decl) #define WX_DECLARE_EXPORTED_LIST(elementtype, listname) \ - WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLEXPORT) + WX_DECLARE_LIST_WITH_DECL(elementtype, listname, class WXDLLIMPEXP_CORE) #define WX_DECLARE_EXPORTED_LIST_PTR(elementtype, listname) \ typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ - WX_DECLARE_LIST_PTR_2(elementtype, listname, wx##listname##Node, class WXDLLEXPORT) + WX_DECLARE_LIST_PTR_2(elementtype, listname, wx##listname##Node, class WXDLLIMPEXP_CORE) #define WX_DECLARE_USER_EXPORTED_LIST(elementtype, listname, usergoo) \ typedef elementtype _WX_LIST_ITEM_TYPE_##listname; \ @@ -1182,7 +1178,7 @@ public: #if !wxUSE_STL wxList& operator=(const wxList& list) - { (void) wxListBase::operator=(list); return *this; } + { if (&list != this) Assign(list); return *this; } // compatibility methods void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); } @@ -1192,11 +1188,6 @@ public: #else wxNode *Member(wxObject *object) const { return (wxNode *)Find(object); } #endif - -private: -#if !wxUSE_STL - DECLARE_DYNAMIC_CLASS(wxList) -#endif }; #if !wxUSE_STL @@ -1223,7 +1214,14 @@ public: // inefficient!) wxStringList(const wxStringList& other) : wxStringListBase() { DeleteContents(true); DoCopy(other); } wxStringList& operator=(const wxStringList& other) - { Clear(); DoCopy(other); return *this; } + { + if (&other != this) + { + Clear(); + DoCopy(other); + } + return *this; + } // operations // makes a copy of the string @@ -1242,8 +1240,6 @@ public: private: void DoCopy(const wxStringList&); // common part of copy ctor and operator= - - DECLARE_DYNAMIC_CLASS(wxStringList) }; #else // if wxUSE_STL