#ifndef _DYNARRAY_H
#define _DYNARRAY_H
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "dynarray.h"
#endif
/*
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.
*/
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]; } \
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: \
- typedef T base_type; \
\
- void Grow(); \
+ void Grow(size_t nIncrement = 0); \
\
size_t m_nSize, \
m_nCount; \
\
T *m_pItems; \
-};
+}
// ============================================================================
// The private helper macros containing the core of the array classes
int Index(T Item, bool bFromEnd = FALSE) const \
{ return base::Index(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(Item, nInsert); } \
+ void Insert(T Item, size_t uiIndex, size_t nInsert = 1) \
+ { base::Insert(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, \
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, \
\
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); } \
\
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); } \
\
// 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