X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2600d8ee0cb2304db077ccc0327fa2fa98b856c3..7491d644e6103afc2a69b750ca255218181b63a3:/include/wx/dynarray.h diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index 67bcab55d8..a5b90b2b16 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -123,8 +123,8 @@ protected: /** Search the element in the array, starting from the either side @param bFromEnd if TRUE, start from the end - @return index of the first item matched or NOT_FOUND - @see NOT_FOUND + @return index of the first item matched or wxNOT_FOUND + @see wxNOT_FOUND */ int Index(long lItem, bool bFromEnd = FALSE) const; /// search for an item using binary search in a sorted array @@ -162,6 +162,9 @@ private: // types of sizeof()<=sizeof(long) or pointers if sizeof(pointer)<=sizeof(long) // // NB: it has only inline functions => takes no space at all +// Mod by JACS: Salford C++ doesn't like 'var->operator=' syntax, as in: +// { ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); +// so using a temporary variable instead. // ---------------------------------------------------------------------------- #define _WX_DEFINE_ARRAY(T, name) \ typedef int (CMPFUNC_CONV *CMPFUNC##T)(T *pItem1, T *pItem2); \ @@ -172,7 +175,8 @@ public: \ { wxASSERT( sizeof(T) <= sizeof(long) ); } \ \ name& operator=(const name& src) \ - { ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); \ + { wxBaseArray* temp = (wxBaseArray*) this; \ + (*temp) = ((const wxBaseArray&)src); \ return *this; } \ \ T& operator[](size_t uiIndex) const \ @@ -193,7 +197,7 @@ public: \ void Remove(size_t uiIndex) { wxBaseArray::Remove(uiIndex); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ - wxCHECK2_MSG( iIndex != NOT_FOUND, return, \ + wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ "removing inexisting element in wxArray::Remove" ); \ wxBaseArray::Remove((size_t)iIndex); } \ \ @@ -216,6 +220,9 @@ public: \ // the normal arrays otherwise. // // NB: it has only inline functions => takes no space at all +// Mod by JACS: Salford C++ doesn't like 'var->operator=' syntax, as in: +// { ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); +// so using a temporary variable instead. // ---------------------------------------------------------------------------- #define _WX_DEFINE_SORTED_ARRAY(T, name) \ typedef int (CMPFUNC_CONV *SCMPFUNC##T)(T pItem1, T pItem2); \ @@ -226,7 +233,8 @@ public: \ { wxASSERT( sizeof(T) <= sizeof(long) ); m_fnCompare = fn; } \ \ name& operator=(const name& src) \ - { ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); \ + { wxBaseArray* temp = (wxBaseArray*) this; \ + (*temp) = ((const wxBaseArray&)src); \ m_fnCompare = src.m_fnCompare; \ return *this; } \ \ @@ -246,7 +254,7 @@ public: \ void Remove(size_t uiIndex) { wxBaseArray::Remove(uiIndex); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ - wxCHECK2_MSG( iIndex != NOT_FOUND, return, \ + wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ "removing inexisting element in wxArray::Remove" ); \ wxBaseArray::Remove((size_t)iIndex); } \ \ @@ -369,7 +377,7 @@ private: \ @memo declare objarray class 'name' containing elements of type 'T' */ #define WX_DECLARE_OBJARRAY(T, name) typedef T _L##name; \ - _WX_DECLARE_LIST(_L##name, name) + _WX_DECLARE_OBJARRAY(_L##name, name) /** To use an objarray class you must @@ -411,5 +419,25 @@ WX_DEFINE_ARRAY(void *, wxArrayPtrVoid); #undef WXDLLEXPORTLOCAL #define WXDLLEXPORTLOCAL +// ----------------------------------------------------------------------------- +// convinience macros +// ----------------------------------------------------------------------------- + +// delete all array elements +// +// NB: the class declaration of the array elements must be visible from the +// place where you use this macro, otherwise the proper destructor may not +// be called (a decent compiler should give a warning about it, but don't +// count on it)! +#define WX_CLEAR_ARRAY(array) \ + { \ + size_t count = array.Count(); \ + for ( size_t n = 0; n < count; n++ ) \ + { \ + delete array[n]; \ + } \ + \ + array.Empty(); \ + } #endif // _DYNARRAY_H