]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/dynarray.h
fixed the channel order for Mac (alpha comes first)
[wxWidgets.git] / include / wx / dynarray.h
index 649e4b9797ebe3ed68127c2e62d7e18a1184c240..fb4b3f6d8baaa8e8748924cea59c0100a9507faf 100644 (file)
@@ -6,13 +6,13 @@
 // Created:     12.09.97
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// 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,9 +90,12 @@ 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                                     \
@@ -102,24 +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:                                                            \
-  typedef T base_type;                                              \
-                                                                    \
-  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