X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/acf88ae62167d8d4b832b867ba24341ef8467ab9..a949e8fac2666418b2a6eb15e94959563cf8aad6:/src/common/dynarray.cpp diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 25a7b4a31d..4d0ee51d28 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -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], \