X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/75d7ef36eb97f84a53715721d11708cc33420cc2..ef094fa075bc56bcbc33b12159c395ea28afda3b:/include/wx/dynarray.h diff --git a/include/wx/dynarray.h b/include/wx/dynarray.h index da55179b23..fb4b3f6d8b 100644 --- a/include/wx/dynarray.h +++ b/include/wx/dynarray.h @@ -6,13 +6,13 @@ // Created: 12.09.97 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _DYNARRAY_H #define _DYNARRAY_H -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "dynarray.h" #endif @@ -57,7 +57,7 @@ /* Callback compare function for quick sort. - + It must return negative value, 0 or positive value if the first item is less than, equal to or greater than the second one. */ @@ -90,11 +90,13 @@ public: \ void Alloc(size_t uiSize); \ void Shrink(); \ \ - size_t GetCount() const { return m_nCount; } \ - bool IsEmpty() const { return m_nCount == 0; } \ - size_t Count() const { return m_nCount; } \ + size_t GetCount() const { return m_nCount; } \ + void SetCount(size_t n, T defval = T(0)); \ + bool IsEmpty() const { return m_nCount == 0; } \ + size_t Count() const { return m_nCount; } \ \ typedef T base_type; \ + \ protected: \ T& Item(size_t uiIndex) const \ { wxASSERT( uiIndex < m_nCount ); return m_pItems[uiIndex]; } \ @@ -103,23 +105,23 @@ protected: \ int Index(T lItem, bool bFromEnd = FALSE) const; \ int Index(T lItem, CMPFUNC fnCompare) const; \ size_t IndexForInsert(T lItem, CMPFUNC fnCompare) const; \ - void Add(T lItem); \ + void Add(T lItem, size_t nInsert = 1); \ void Add(T lItem, CMPFUNC fnCompare); \ - void Insert(T lItem, size_t uiIndex); \ + void Insert(T lItem, size_t uiIndex, size_t nInsert = 1); \ void Remove(T lItem); \ - void RemoveAt(size_t uiIndex); \ + void RemoveAt(size_t uiIndex, size_t nRemove = 1); \ \ void Sort(CMPFUNC fnCompare); \ \ private: \ - \ - void Grow(); \ + void Grow(size_t nIncrement = 0); \ + bool Realloc(size_t nSize); \ \ size_t m_nSize, \ m_nCount; \ \ T *m_pItems; \ -}; +} // ============================================================================ // The private helper macros containing the core of the array classes @@ -166,14 +168,15 @@ public: \ { return (T&)(base::Item(Count() - 1)); } \ \ int Index(T Item, bool bFromEnd = FALSE) const \ - { return base::Index(Item, bFromEnd); } \ + { return base::Index((base_type)Item, bFromEnd); } \ \ - void Add(T Item) \ - { base::Add(Item); } \ - void Insert(T Item, size_t uiIndex) \ - { base::Insert(Item, uiIndex) ; } \ + 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 RemoveAt(size_t uiIndex) { base::RemoveAt(uiIndex); } \ + void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ + { base::RemoveAt(uiIndex, nRemove); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ @@ -223,7 +226,8 @@ public: \ void Add(T Item) \ { base::Add(Item, (CMPFUNC)m_fnCompare); } \ \ - void RemoveAt(size_t uiIndex) { base::RemoveAt(uiIndex); } \ + void RemoveAt(size_t uiIndex, size_t nRemove = 1) \ + { base::RemoveAt(uiIndex, nRemove); } \ void Remove(T Item) \ { int iIndex = Index(Item); \ wxCHECK2_MSG( iIndex != wxNOT_FOUND, return, \ @@ -259,11 +263,11 @@ public: \ \ int Index(const T& Item, bool bFromEnd = FALSE) const; \ \ - void Add(const T& Item); \ + void Add(const T& Item, size_t nInsert = 1); \ void Add(const T* pItem) \ { base::Add((T*)pItem); } \ \ - void Insert(const T& Item, size_t uiIndex); \ + void Insert(const T& Item, size_t uiIndex, size_t nInsert = 1); \ void Insert(const T* pItem, size_t uiIndex) \ { base::Insert((T*)pItem, uiIndex); } \ \ @@ -273,7 +277,7 @@ public: \ T* Detach(size_t uiIndex) \ { T* p = (T*)base::Item(uiIndex); \ base::RemoveAt(uiIndex); return p; } \ - void RemoveAt(size_t uiIndex); \ + void RemoveAt(size_t uiIndex, size_t nRemove = 1); \ \ void Sort(CMPFUNC##T fCmp) { base::Sort((CMPFUNC##base)fCmp); } \ \ @@ -463,11 +467,11 @@ private: \ // Some commonly used predefined base arrays // ---------------------------------------------------------------------------- -WX_DECLARE_EXPORTED_BASEARRAY(void *, wxBaseArrayPtrVoid); -WX_DECLARE_EXPORTED_BASEARRAY(short, wxBaseArrayShort); -WX_DECLARE_EXPORTED_BASEARRAY(int, wxBaseArrayInt); -WX_DECLARE_EXPORTED_BASEARRAY(long, wxBaseArrayLong); -WX_DECLARE_EXPORTED_BASEARRAY(double, wxBaseArrayDouble); +WX_DECLARE_EXPORTED_BASEARRAY(const void *, wxBaseArrayPtrVoid); +WX_DECLARE_EXPORTED_BASEARRAY(short, wxBaseArrayShort); +WX_DECLARE_EXPORTED_BASEARRAY(int, wxBaseArrayInt); +WX_DECLARE_EXPORTED_BASEARRAY(long, wxBaseArrayLong); +WX_DECLARE_EXPORTED_BASEARRAY(double, wxBaseArrayDouble); // ---------------------------------------------------------------------------- // Convenience macros to define arrays from base arrays