X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/35d5da677d3203d7027eb28b1b6878be9d920108..cc4d5638c66a409e421420ed7110917755a66788:/src/common/dynarray.cpp diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 76cff5323e..be01a4b840 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -4,7 +4,6 @@ // Author: Vadim Zeitlin // Modified by: // Created: 12.09.97 -// RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -28,7 +27,7 @@ #include <stdlib.h> #include <string.h> // 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 @@ -87,7 +86,7 @@ name::name() \ { \ m_nSize = \ m_nCount = 0; \ - m_pItems = (T *)NULL; \ + m_pItems = NULL; \ } \ \ /* copy ctor */ \ @@ -107,7 +106,7 @@ name::name(const name& src) \ } \ } \ else \ - m_pItems = (T *) NULL; \ + m_pItems = NULL; \ } \ \ /* assignment operator */ \ @@ -129,7 +128,7 @@ name& name::operator=(const name& src) \ } \ } \ else \ - m_pItems = (T *) NULL; \ + m_pItems = NULL; \ \ return *this; \ } \ @@ -158,13 +157,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 +357,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 +385,7 @@ _WX_DEFINE_BASEARRAY(double, wxBaseArrayDouble) #pragma warning(pop) #endif -#else // wxUSE_STL +#else // wxUSE_STD_CONTAINERS #include "wx/arrstr.h" @@ -475,32 +477,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