X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc9934d489389f853d6866a637aeedf47074b0b6..005659f0ffe0b280c3f800a5706b93fe9b78276e:/src/common/dynarray.cpp diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 752effe3c2..0f556decb5 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -28,7 +28,7 @@ #include #include // for memmove -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // we cast the value to long from which we cast it to void * in IndexForInsert: // this can't work if the pointers are not big enough @@ -158,13 +158,13 @@ void name::Grow(size_t nIncrement) \ if( (m_nCount == m_nSize) || ((m_nSize - m_nCount) < nIncrement) ) { \ if( m_nSize == 0 ) { \ /* was empty, determine initial size */ \ - size_t size = WX_ARRAY_DEFAULT_INITIAL_SIZE; \ - if (size < nIncrement) size = nIncrement; \ + size_t sz = WX_ARRAY_DEFAULT_INITIAL_SIZE; \ + if (sz < nIncrement) sz = nIncrement; \ /* allocate some memory */ \ - m_pItems = new T[size]; \ + m_pItems = new T[sz]; \ /* only grow if allocation succeeded */ \ if ( m_pItems ) { \ - m_nSize = size; \ + m_nSize = sz; \ } \ } \ else \ @@ -358,6 +358,9 @@ void name::insert(iterator it, const_iterator first, const_iterator last) \ return; \ Grow(nInsert); \ \ + /* old iterator could have been invalidated by Grow(). */ \ + it = begin() + nIndex; \ + \ memmove(&m_pItems[nIndex + nInsert], &m_pItems[nIndex], \ (m_nCount - nIndex)*sizeof(T)); \ for (size_t i = 0; i < nInsert; ++i, ++it, ++first) \ @@ -383,7 +386,7 @@ _WX_DEFINE_BASEARRAY(double, wxBaseArrayDouble) #pragma warning(pop) #endif -#else // wxUSE_STL +#else // wxUSE_STD_CONTAINERS #include "wx/arrstr.h" @@ -491,4 +494,4 @@ int wxSortedArrayString::Index(const wxString& str, return it - begin(); } -#endif // !wxUSE_STL/wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS/wxUSE_STD_CONTAINERS