X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d3b9f782ef3949f583e8ac53795d36787f044fc3..64ea838d8f4d1853b7d850db93ee565e901d099a:/src/common/dynarray.cpp diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 52e2e8ca1d..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" @@ -475,32 +478,20 @@ void wxArrayString::Sort(bool reverseOrder) } } -int wxSortedArrayString::Index(const wxString& str, bool bCase, bool WXUNUSED(bFromEnd)) const +int wxSortedArrayString::Index(const wxString& str, + bool WXUNUSED_UNLESS_DEBUG(bCase), + bool WXUNUSED_UNLESS_DEBUG(bFromEnd)) const { - wxSortedArrayString::const_iterator it; + wxASSERT_MSG( bCase && !bFromEnd, + "search parameters ignored for sorted array" ); - if (bCase) - it = std::lower_bound(begin(), end(), str, - wxStringCompare(wxStringCmp())); - else - it = std::lower_bound(begin(), end(), str, - wxStringCompare(wxStringCmpNoCase())); + wxSortedArrayString::const_iterator + it = std::lower_bound(begin(), end(), str, wxStringCompare(wxStringCmp())); - if (it == end()) + if ( it == end() || str.Cmp(*it) != 0 ) return wxNOT_FOUND; - if (bCase) - { - if (str.Cmp(*it) != 0) - return wxNOT_FOUND; - } - else - { - if (str.CmpNoCase(*it) != 0) - return wxNOT_FOUND; - } - return it - begin(); } -#endif // !wxUSE_STL/wxUSE_STL +#endif // !wxUSE_STD_CONTAINERS/wxUSE_STD_CONTAINERS