]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynarray.cpp
removed extremely user-unfriendly translations
[wxWidgets.git] / src / common / dynarray.cpp
index 25a7b4a31d0d868f45b3aa2d98e342733c21644d..4d0ee51d2867fc54067fef5ee9eae2dbebb43b71 100644 (file)
@@ -110,13 +110,16 @@ name& name::operator=(const name& src)                                      \
 void name::Grow(size_t nIncrement)                                          \
 {                                                                           \
   /* only do it if no more place */                                         \
-  if( m_nCount == m_nSize ) {                                               \
+  if( (m_nCount == m_nSize) || ((m_nSize - m_nCount) < nIncrement) ) {      \
     if( m_nSize == 0 ) {                                                    \
-        /* was empty, alloc some memory */                                  \
-      m_pItems = new T[WX_ARRAY_DEFAULT_INITIAL_SIZE];                      \
+      /* was empty, determine initial size */                               \
+      size_t size = WX_ARRAY_DEFAULT_INITIAL_SIZE;                          \
+      if (size < nIncrement) size = nIncrement;                             \
+      /* allocate some memory */                                            \
+      m_pItems = new T[size];                                               \
       /* only grow if allocation succeeded */                               \
       if ( m_pItems ) {                                                     \
-          m_nSize = WX_ARRAY_DEFAULT_INITIAL_SIZE;                          \
+          m_nSize = size;                                                   \
       }                                                                     \
     }                                                                       \
     else                                                                    \
@@ -250,6 +253,8 @@ int name::Index(T lItem, CMPFUNC fnCompare) const                           \
 /* add item at the end */                                                   \
 void name::Add(T lItem, size_t nInsert)                                     \
 {                                                                           \
+  if (nInsert == 0)                                                         \
+      return;                                                               \
   Grow(nInsert);                                                            \
   for (size_t i = 0; i < nInsert; i++)                                      \
       m_pItems[m_nCount++] = lItem;                                         \
@@ -268,6 +273,8 @@ void name::Insert(T lItem, size_t nIndex, size_t nInsert)                   \
   wxCHECK_RET( m_nCount <= m_nCount + nInsert,                              \
                wxT("array size overflow in wxArray::Insert") );             \
                                                                             \
+  if (nInsert == 0)                                                         \
+      return;                                                               \
   Grow(nInsert);                                                            \
                                                                             \
   memmove(&m_pItems[nIndex + nInsert], &m_pItems[nIndex],                   \