@memo Base class for template array and list classes
*/
// ----------------------------------------------------------------------------
-class wxBaseArray
+class WXDLLEXPORT wxBaseArray
{
public:
/** @name ctors and dtor */
/** @name memory management */
//@{
/// empties the list, but doesn't release memory
- void Empty() { m_uiCount = 0; }
+ void Empty() { m_nCount = 0; }
/// empties the list and releases memory
void Clear();
/// preallocates memory for given number of items
- void Alloc(uint uiSize);
+ void Alloc(size_t uiSize);
+ /// minimizes the memory used by the array (frees unused memory)
+ void Shrink();
//@}
/** @name simple accessors */
//@{
/// number of elements in the array
- uint Count() const { return m_uiCount; }
+ size_t Count() const { return m_nCount; }
+ size_t GetCount() const { return m_nCount; }
/// is it empty?
- bool IsEmpty() const { return m_uiCount == 0; }
+ bool IsEmpty() const { return m_nCount == 0; }
//@}
protected:
/** @name items access */
//@{
/// get item at position uiIndex (range checking is done in debug version)
- long& Item(uint uiIndex) const
- { wxASSERT( uiIndex < m_uiCount ); return m_pItems[uiIndex]; }
+ long& Item(size_t uiIndex) const
+ { wxASSERT( uiIndex < m_nCount ); return m_pItems[uiIndex]; }
/// same as Item()
- long& operator[](uint uiIndex) const { return Item(uiIndex); }
+ long& operator[](size_t uiIndex) const { return Item(uiIndex); }
//@}
/** @name item management */
*/
int Index(long lItem, bool bFromEnd = FALSE) const;
/// search for an item using binary search in a sorted array
- int Index(long lItem, CMPFUNC fnCompare);
+ int Index(long lItem, CMPFUNC fnCompare) const;
/// add new element at the end
void Add(long lItem);
/// add item assuming the array is sorted with fnCompare function
void Add(long lItem, CMPFUNC fnCompare);
/// add new element at given position (it becomes Item[uiIndex])
- void Insert(long lItem, uint uiIndex);
+ void Insert(long lItem, size_t uiIndex);
/// remove first item matching this value
void Remove(long lItem);
/// remove item by index
- void Remove(uint uiIndex);
+ void Remove(size_t uiIndex);
//@}
/// sort array elements using given compare function
private:
void Grow(); // makes array bigger if needed
- uint m_uiSize, // current size of the array
- m_uiCount; // current number of elements
+ size_t m_nSize, // current size of the array
+ m_nCount; // current number of elements
long *m_pItems; // pointer to data
};
// ----------------------------------------------------------------------------
#define _WX_DEFINE_ARRAY(T, name) \
typedef int (CMPFUNC_CONV *CMPFUNC##T)(T *pItem1, T *pItem2); \
-class name : public wxBaseArray \
+class WXDLLEXPORTLOCAL name : public wxBaseArray \
{ \
public: \
name() \
{ ((wxBaseArray *)this)->operator=((const wxBaseArray&)src); \
return *this; } \
\
- T& operator[](uint uiIndex) const \
+ T& operator[](size_t uiIndex) const \
{ return (T&)(wxBaseArray::Item(uiIndex)); } \
- T& Item(uint uiIndex) const \
+ T& Item(size_t uiIndex) const \
{ return (T&)(wxBaseArray::Item(uiIndex)); } \
T& Last() const \
{ return (T&)(wxBaseArray::Item(Count() - 1)); } \
\
void Add(T Item) \
{ wxBaseArray::Add((long)Item); } \
- void Insert(T Item, uint uiIndex) \
+ void Insert(T Item, size_t uiIndex) \
{ wxBaseArray::Insert((long)Item, uiIndex) ; } \
\
- void Remove(uint uiIndex) { wxBaseArray::Remove(uiIndex); } \
+ void Remove(size_t uiIndex) { wxBaseArray::Remove(uiIndex); } \
void Remove(T Item) \
{ int iIndex = Index(Item); \
wxCHECK2_MSG( iIndex != NOT_FOUND, return, \
"removing inexisting element in wxArray::Remove" ); \
- wxBaseArray::Remove((uint)iIndex); } \
+ wxBaseArray::Remove((size_t)iIndex); } \
\
void Sort(CMPFUNC##T fCmp) { wxBaseArray::Sort((CMPFUNC)fCmp); } \
}
// ----------------------------------------------------------------------------
#define _WX_DEFINE_SORTED_ARRAY(T, name) \
typedef int (CMPFUNC_CONV *SCMPFUNC##T)(T pItem1, T pItem2); \
-class name : public wxBaseArray \
+class WXDLLEXPORTLOCAL name : public wxBaseArray \
{ \
public: \
name(SCMPFUNC##T fn) \
m_fnCompare = src.m_fnCompare; \
return *this; } \
\
- T& operator[](uint uiIndex) const \
+ T& operator[](size_t uiIndex) const \
{ return (T&)(wxBaseArray::Item(uiIndex)); } \
- T& Item(uint uiIndex) const \
+ T& Item(size_t uiIndex) const \
{ return (T&)(wxBaseArray::Item(uiIndex)); } \
T& Last() const \
{ return (T&)(wxBaseArray::Item(Count() - 1)); } \
void Add(T Item) \
{ wxBaseArray::Add((long)Item, (CMPFUNC)m_fnCompare); } \
\
- void Remove(uint uiIndex) { wxBaseArray::Remove(uiIndex); } \
+ void Remove(size_t uiIndex) { wxBaseArray::Remove(uiIndex); } \
void Remove(T Item) \
{ int iIndex = Index(Item); \
wxCHECK2_MSG( iIndex != NOT_FOUND, return, \
"removing inexisting element in wxArray::Remove" ); \
- wxBaseArray::Remove((uint)iIndex); } \
+ wxBaseArray::Remove((size_t)iIndex); } \
\
private: \
SCMPFUNC##T m_fnCompare; \
// ----------------------------------------------------------------------------
#define _WX_DECLARE_LIST(T, name) \
typedef int (CMPFUNC_CONV *CMPFUNC##T)(T** pItem1, T** pItem2); \
-class name : public wxBaseArray \
+class WXDLLEXPORTLOCAL name : public wxBaseArray \
{ \
public: \
name() { } \
\
~name(); \
\
- T& operator[](uint uiIndex) const \
+ T& operator[](size_t uiIndex) const \
{ return *(T*)wxBaseArray::Item(uiIndex); } \
- T& Item(uint uiIndex) const \
+ T& Item(size_t uiIndex) const \
{ return *(T*)wxBaseArray::Item(uiIndex); } \
T& Last() const \
{ return *(T*)(wxBaseArray::Item(Count() - 1)); } \
void Add(const T* pItem) \
{ wxBaseArray::Add((long)pItem); } \
\
- void Insert(const T& Item, uint uiIndex); \
- void Insert(const T* pItem, uint uiIndex) \
+ void Insert(const T& Item, size_t uiIndex); \
+ void Insert(const T* pItem, size_t uiIndex) \
{ wxBaseArray::Insert((long)pItem, uiIndex); } \
\
void Empty(); \
\
- T* Detach(uint uiIndex) \
+ T* Detach(size_t uiIndex) \
{ T* p = (T*)wxBaseArray::Item(uiIndex); \
wxBaseArray::Remove(uiIndex); return p; } \
- void Remove(uint uiIndex); \
+ void Remove(size_t uiIndex); \
\
void Sort(CMPFUNC##T fCmp) { wxBaseArray::Sort((CMPFUNC)fCmp); } \
\
// # overhead if not used?
// ----------------------------------------------------------------------------
+#define WXDLLEXPORTLOCAL WXDLLEXPORT
+
//@{
/** @name ArrayInt */
WX_DEFINE_ARRAY(int, wxArrayInt);
//@}
+#undef WXDLLEXPORTLOCAL
+#define WXDLLEXPORTLOCAL
+
#endif // _DYNARRAY_H