X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/edad629344156bc9274a1af372f91d05d54ca297..75aa19469b8b31ae58d6e8956b0e4c7200e30578:/include/wx/dynarray.h diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index b24d807b9c..be59192bc2 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: dynarray.h +// Name: wx/dynarray.h // Purpose: auto-resizable (i.e. dynamic) array support // Author: Vadim Zeitlin // Modified by: @@ -12,11 +12,6 @@ #ifndef _DYNARRAY_H #define _DYNARRAY_H -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && \ - !(defined(__MINGW32__) && __GNUC__ == 3 && __GNUC_MINOR__ == 2) -#pragma interface "dynarray.h" -#endif - #include "wx/defs.h" #if wxUSE_STL @@ -174,7 +169,7 @@ public: \ \ void Empty() { m_nCount = 0; } \ void Clear(); \ - void Alloc(size_t uiSize); \ + void Alloc(size_t n) { if ( n > m_nSize ) Realloc(n); } \ void Shrink(); \ \ size_t GetCount() const { return m_nCount; } \ @@ -230,8 +225,9 @@ protected: \ void insert(iterator it, const_iterator first, const_iterator last);\ void pop_back() { RemoveAt(size() - 1); } \ void push_back(const value_type& v) { Add(v); } \ - void reserve(size_type n) { if(n > m_nSize) Realloc(n); } \ - void resize(size_type n, value_type v = value_type()); \ + void reserve(size_type n) { Alloc(n); } \ + void resize(size_type n, value_type v = value_type()) \ + { SetCount(n, v); } \ \ iterator begin() { return m_pItems; } \ iterator end() { return m_pItems + m_nCount; } \ @@ -296,15 +292,15 @@ public: \ int Index(T e, bool bFromEnd = false) const \ { return base::Index(e, bFromEnd); } \ \ - void Add(T Item, size_t nInsert = 1) \ - { insert(end(), nInsert, Item); } \ - void Insert(T Item, size_t uiIndex, size_t nInsert = 1) \ - { insert(begin() + uiIndex, nInsert, Item); } \ + void Add(T lItem, size_t nInsert = 1) \ + { insert(end(), nInsert, lItem); } \ + void Insert(T lItem, size_t uiIndex, size_t nInsert = 1) \ + { insert(begin() + uiIndex, nInsert, lItem); } \ \ void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ { base::RemoveAt(uiIndex, nRemove); } \ - void Remove(T Item) \ - { int iIndex = Index(Item); \ + void Remove(T lItem) \ + { int iIndex = Index(lItem); \ wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ _WX_ERROR_REMOVE); \ RemoveAt((size_t)iIndex); } \ @@ -320,8 +316,9 @@ public: \ // common declaration used by both _WX_DEFINE_TYPEARRAY and // _WX_DEFINE_TYPEARRAY_PTR #define _WX_DEFINE_TYPEARRAY_HELPER(T, name, base, classexp, ptrop) \ -wxCOMPILE_TIME_ASSERT(sizeof(T) <= sizeof(base::base_type), \ - TypeTooBigToBeStoredIn##base); \ +wxCOMPILE_TIME_ASSERT2(sizeof(T) <= sizeof(base::base_type), \ + TypeTooBigToBeStoredIn##base, \ + name); \ typedef int (CMPFUNC_CONV *CMPFUNC##T)(T *pItem1, T *pItem2); \ classexp name : public base \ { \ @@ -341,18 +338,18 @@ public: \ T& Last() const \ { return (T&)(base::operator[](Count() - 1)); } \ \ - int Index(T Item, bool bFromEnd = false) const \ - { return base::Index((base_type)Item, bFromEnd); } \ + int Index(T lItem, bool bFromEnd = false) const \ + { return base::Index((base_type)lItem, bFromEnd); } \ \ - void Add(T Item, size_t nInsert = 1) \ - { base::Add((base_type)Item, nInsert); } \ - void Insert(T Item, size_t uiIndex, size_t nInsert = 1) \ - { base::Insert((base_type)Item, uiIndex, nInsert) ; } \ + void Add(T lItem, size_t nInsert = 1) \ + { base::Add((base_type)lItem, nInsert); } \ + void Insert(T lItem, size_t uiIndex, size_t nInsert = 1) \ + { base::Insert((base_type)lItem, uiIndex, nInsert) ; } \ \ void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ { base::RemoveAt(uiIndex, nRemove); } \ - void Remove(T Item) \ - { int iIndex = Index(Item); \ + void Remove(T lItem) \ + { int iIndex = Index(lItem); \ wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ _WX_ERROR_REMOVE); \ base::RemoveAt((size_t)iIndex); } \ @@ -399,13 +396,13 @@ public: \ reverse_iterator(const itor& it) : m_ptr(it.m_ptr) { } \ reference operator*() const { return *m_ptr; } \ ptrop \ - itor operator++() { --m_ptr; return *this; } \ - itor operator++(int) \ + itor& operator++() { --m_ptr; return *this; } \ + const itor operator++(int) \ { reverse_iterator tmp = *this; --m_ptr; return tmp; } \ - itor operator--() { ++m_ptr; return *this; } \ - itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; } \ - bool operator ==(const itor& it) { return m_ptr == it.m_ptr; } \ - bool operator !=(const itor& it) { return m_ptr != it.m_ptr; } \ + itor& operator--() { ++m_ptr; return *this; } \ + const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; }\ + bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; }\ + bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; }\ }; \ \ class const_reverse_iterator \ @@ -432,13 +429,13 @@ public: \ const_reverse_iterator(const reverse_iterator& it) : m_ptr(it.m_ptr) { }\ reference operator*() const { return *m_ptr; } \ ptrop \ - itor operator++() { --m_ptr; return *this; } \ - itor operator++(int) \ + itor& operator++() { --m_ptr; return *this; } \ + const itor operator++(int) \ { itor tmp = *this; --m_ptr; return tmp; } \ - itor operator--() { ++m_ptr; return *this; } \ - itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; } \ - bool operator ==(const itor& it) { return m_ptr == it.m_ptr; } \ - bool operator !=(const itor& it) { return m_ptr != it.m_ptr; } \ + itor& operator--() { ++m_ptr; return *this; } \ + const itor operator--(int) { itor tmp = *this; ++m_ptr; return tmp; }\ + bool operator ==(const itor& it) const { return m_ptr == it.m_ptr; }\ + bool operator !=(const itor& it) const { return m_ptr != it.m_ptr; }\ }; \ \ name(size_type n, const_reference v) { assign(n, v); } \ @@ -476,7 +473,8 @@ public: \ reverse_iterator rend() { return reverse_iterator(begin() - 1); } \ const_reverse_iterator rend() const; \ void reserve(size_type n) { base::reserve(n); }; \ - void resize(size_type n, value_type v = value_type()); \ + void resize(size_type n, value_type v = value_type()) \ + { base::resize(n, v); } \ } #define _WX_PTROP pointer operator->() const { return m_ptr; } @@ -495,8 +493,9 @@ public: \ // ---------------------------------------------------------------------------- #define _WX_DEFINE_SORTED_TYPEARRAY_2(T, name, base, defcomp, classexp, comptype)\ -wxCOMPILE_TIME_ASSERT(sizeof(T) <= sizeof(base::base_type), \ - TypeTooBigToBeStoredInSorted##base); \ +wxCOMPILE_TIME_ASSERT2(sizeof(T) <= sizeof(base::base_type), \ + TypeTooBigToBeStoredInSorted##base, \ + name); \ classexp name : public base \ { \ typedef comptype SCMPFUNC; \ @@ -516,22 +515,22 @@ public: \ T& Last() const \ { return (T&)(base::operator[](size() - 1)); } \ \ - int Index(T Item) const \ - { return base::Index(Item, (CMPFUNC)m_fnCompare); } \ + int Index(T lItem) const \ + { return base::Index(lItem, (CMPFUNC)m_fnCompare); } \ \ - size_t IndexForInsert(T Item) const \ - { return base::IndexForInsert(Item, (CMPFUNC)m_fnCompare); } \ + size_t IndexForInsert(T lItem) const \ + { return base::IndexForInsert(lItem, (CMPFUNC)m_fnCompare); } \ \ void AddAt(T item, size_t index) \ { base::insert(begin() + index, item); } \ \ - size_t Add(T Item) \ - { return base::Add(Item, (CMPFUNC)m_fnCompare); } \ + size_t Add(T lItem) \ + { return base::Add(lItem, (CMPFUNC)m_fnCompare); } \ \ void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ { base::erase(begin() + uiIndex, begin() + uiIndex + nRemove); } \ - void Remove(T Item) \ - { int iIndex = Index(Item); \ + void Remove(T lItem) \ + { int iIndex = Index(lItem); \ wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ _WX_ERROR_REMOVE ); \ base::erase(begin() + iIndex); } \ @@ -573,17 +572,17 @@ public: \ T& Last() const \ { return *(T*)(base::operator[](size() - 1)); } \ \ - int Index(const T& Item, bool bFromEnd = false) const; \ + int Index(const T& lItem, bool bFromEnd = false) const; \ \ - void Add(const T& Item, size_t nInsert = 1); \ + void Add(const T& lItem, size_t nInsert = 1); \ void Add(const T* pItem) \ { base::push_back((T*)pItem); } \ void push_back(const T* pItem) \ { base::push_back((T*)pItem); } \ - void push_back(const T& Item) \ - { Add(Item); } \ + void push_back(const T& lItem) \ + { Add(lItem); } \ \ - void Insert(const T& Item, size_t uiIndex, size_t nInsert = 1); \ + void Insert(const T& lItem, size_t uiIndex, size_t nInsert = 1); \ void Insert(const T* pItem, size_t uiIndex) \ { base::insert(begin() + uiIndex, (T*)pItem); } \ \ @@ -696,7 +695,10 @@ private: \ // the normal arrays otherwise. // ---------------------------------------------------------------------------- -#define wxARRAY_EMPTY_CMP +// we need a macro which expands to nothing to pass correct number of +// parameters to a nested macro invocation even when we don't have anything to +// pass it +#define wxARRAY_EMPTY #define WX_DEFINE_SORTED_TYPEARRAY(T, name, base) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, base, \ @@ -709,7 +711,7 @@ private: \ typedef T _wxArray##name; \ typedef int (CMPFUNC_CONV *SCMPFUNC##name)(T pItem1, T pItem2); \ _WX_DEFINE_SORTED_TYPEARRAY_2(_wxArray##name, name, base, \ - wxARRAY_EMPTY_CMP, class expmode, SCMPFUNC##name) + wxARRAY_EMPTY, class expmode, SCMPFUNC##name) // ---------------------------------------------------------------------------- // WX_DEFINE_SORTED_TYPEARRAY_CMP: exactly the same as above but the comparison @@ -806,6 +808,7 @@ private: \ WX_DECLARE_USER_EXPORTED_BASEARRAY(const void *, wxBaseArrayPtrVoid, WXDLLIMPEXP_BASE); +WX_DECLARE_USER_EXPORTED_BASEARRAY(char, wxBaseArrayChar, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(short, wxBaseArrayShort, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(int, wxBaseArrayInt, WXDLLIMPEXP_BASE); WX_DECLARE_USER_EXPORTED_BASEARRAY(long, wxBaseArrayLong, WXDLLIMPEXP_BASE); @@ -827,44 +830,51 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_ARRAY_WITH_DECL_PTR(T, name, decl) \ WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, decl) #define WX_DEFINE_USER_EXPORTED_ARRAY(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, wxBaseArrayPtrVoid, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) #define WX_DEFINE_USER_EXPORTED_ARRAY_PTR(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) + +#define WX_DEFINE_ARRAY_CHAR(T, name) \ + WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayChar) +#define WX_DEFINE_EXPORTED_ARRAY_CHAR(T, name) \ + WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayChar) +#define WX_DEFINE_USER_EXPORTED_ARRAY_CHAR(T, name, expmode) \ + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayChar, wxARRAY_EMPTY expmode) #define WX_DEFINE_ARRAY_SHORT(T, name) \ WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayShort) #define WX_DEFINE_EXPORTED_ARRAY_SHORT(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayShort) #define WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayShort, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayShort, wxARRAY_EMPTY expmode) #define WX_DEFINE_ARRAY_INT(T, name) \ WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayInt) #define WX_DEFINE_EXPORTED_ARRAY_INT(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayInt) #define WX_DEFINE_USER_EXPORTED_ARRAY_INT(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayInt, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayInt, wxARRAY_EMPTY expmode) #define WX_DEFINE_ARRAY_LONG(T, name) \ WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayLong) #define WX_DEFINE_EXPORTED_ARRAY_LONG(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayLong) #define WX_DEFINE_USER_EXPORTED_ARRAY_LONG(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayLong, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayLong, wxARRAY_EMPTY expmode) #define WX_DEFINE_ARRAY_SIZE_T(T, name) \ WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) #define WX_DEFINE_EXPORTED_ARRAY_SIZE_T(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArraySizeT) #define WX_DEFINE_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArraySizeT, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArraySizeT, wxARRAY_EMPTY expmode) #define WX_DEFINE_ARRAY_DOUBLE(T, name) \ WX_DEFINE_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) #define WX_DEFINE_EXPORTED_ARRAY_DOUBLE(T, name) \ WX_DEFINE_EXPORTED_TYPEARRAY_PTR(T, name, wxBaseArrayDouble) #define WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(T, name, expmode) \ - WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayDouble, expmode) + WX_DEFINE_TYPEARRAY_WITH_DECL_PTR(T, name, wxBaseArrayDouble, wxARRAY_EMPTY expmode) // ---------------------------------------------------------------------------- // Convenience macros to define sorted arrays from base arrays @@ -875,14 +885,21 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_EXPORTED_ARRAY(T, name) \ WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid) #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid, expmode) + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayPtrVoid, wxARRAY_EMPTY expmode) + +#define WX_DEFINE_SORTED_ARRAY_CHAR(T, name) \ + WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayChar) +#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CHAR(T, name) \ + WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayChar) +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CHAR(T, name, expmode) \ + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayChar, wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_SHORT(T, name) \ WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayShort) #define WX_DEFINE_SORTED_EXPORTED_ARRAY_SHORT(T, name) \ WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArrayShort) #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SHORT(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayShort, expmode) + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArrayShort, wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_INT(T, name) \ WX_DEFINE_SORTED_TYPEARRAY(T, name, wxBaseArrayInt) @@ -903,7 +920,7 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_EXPORTED_ARRAY_SIZE_T(T, name) \ WX_DEFINE_SORTED_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT) #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_SIZE_T(T, name, expmode) \ - WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT, expmode) + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY(T, name, wxBaseArraySizeT, wxARRAY_EMPTY expmode) // ---------------------------------------------------------------------------- // Convenience macros to define sorted arrays from base arrays @@ -916,7 +933,18 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP(T, cmpfunc, \ name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayPtrVoid, expmode) + wxBaseArrayPtrVoid, \ + wxARRAY_EMPTY expmode) + +#define WX_DEFINE_SORTED_ARRAY_CMP_CHAR(T, cmpfunc, name) \ + WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayChar) +#define WX_DEFINE_SORTED_EXPORTED_ARRAY_CMP_CHAR(T, cmpfunc, name) \ + WX_DEFINE_SORTED_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayChar) +#define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_CHAR(T, cmpfunc, \ + name, expmode) \ + WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ + wxBaseArrayChar, \ + wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_CMP_SHORT(T, cmpfunc, name) \ WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayShort) @@ -925,7 +953,8 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_SHORT(T, cmpfunc, \ name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayShort, expmode) + wxBaseArrayShort, \ + wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_CMP_INT(T, cmpfunc, name) \ WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayInt) @@ -934,7 +963,8 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_INT(T, cmpfunc, \ name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayInt, expmode) + wxBaseArrayInt, \ + wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_CMP_LONG(T, cmpfunc, name) \ WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArrayLong) @@ -943,7 +973,8 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_LONG(T, cmpfunc, \ name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArrayLong, expmode) + wxBaseArrayLong, \ + wxARRAY_EMPTY expmode) #define WX_DEFINE_SORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, name) \ WX_DEFINE_SORTED_TYPEARRAY_CMP(T, cmpfunc, name, wxBaseArraySizeT) @@ -952,7 +983,8 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); #define WX_DEFINE_SORTED_USER_EXPORTED_ARRAY_CMP_SIZE_T(T, cmpfunc, \ name, expmode) \ WX_DEFINE_SORTED_USER_EXPORTED_TYPEARRAY_CMP(T, cmpfunc, name, \ - wxBaseArraySizeT, expmode) + wxBaseArraySizeT, \ + wxARRAY_EMPTY expmode) // ---------------------------------------------------------------------------- // Some commonly used predefined arrays @@ -960,6 +992,7 @@ WX_DECLARE_USER_EXPORTED_BASEARRAY(double, wxBaseArrayDouble, WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_SHORT(short, wxArrayShort, class WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_INT(int, wxArrayInt, class WXDLLIMPEXP_BASE); +WX_DEFINE_USER_EXPORTED_ARRAY_DOUBLE(double, wxArrayDouble, class WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_LONG(long, wxArrayLong, class WXDLLIMPEXP_BASE); WX_DEFINE_USER_EXPORTED_ARRAY_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE); @@ -967,13 +1000,27 @@ WX_DEFINE_USER_EXPORTED_ARRAY_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE // convenience macros // ----------------------------------------------------------------------------- +// prepend all element of one array to another one; e.g. if first array contains +// elements X,Y,Z and the second contains A,B,C (in those orders), then the +// first array will be result as A,B,C,X,Y,Z +#define WX_PREPEND_ARRAY(array, other) \ + { \ + size_t wxAAcnt = (other).size(); \ + (array).Alloc(wxAAcnt); \ + for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ + { \ + (array).Insert((other)[wxAAn], wxAAn); \ + } \ + } + // append all element of one array to another one #define WX_APPEND_ARRAY(array, other) \ { \ - size_t count = (other).size(); \ - for ( size_t n = 0; n < count; n++ ) \ + size_t wxAAcnt = (other).size(); \ + (array).Alloc(wxAAcnt); \ + for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ { \ - (array).push_back((other)[n]); \ + (array).push_back((other)[wxAAn]); \ } \ } @@ -985,14 +1032,13 @@ WX_DEFINE_USER_EXPORTED_ARRAY_PTR(void *, wxArrayPtrVoid, class WXDLLIMPEXP_BASE // count on it)! #define WX_CLEAR_ARRAY(array) \ { \ - size_t count = (array).size(); \ - for ( size_t n = 0; n < count; n++ ) \ + size_t wxAAcnt = (array).size(); \ + for ( size_t wxAAn = 0; wxAAn < wxAAcnt; wxAAn++ ) \ { \ - delete (array)[n]; \ + delete (array)[wxAAn]; \ } \ \ (array).clear(); \ } #endif // _DYNARRAY_H -