X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3b0b5f13f56783d3444dedf615c99840fe7ec93a..dc1f566f6ac9e15f08730ad9a0ec17fef44e9468:/src/common/dynarray.cpp diff --git a/src/common/dynarray.cpp b/src/common/dynarray.cpp index 61400eddf8..1b3a0353b9 100644 --- a/src/common/dynarray.cpp +++ b/src/common/dynarray.cpp @@ -33,6 +33,11 @@ #define max(a, b) (((a) > (b)) ? (a) : (b)) #endif +// 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 +wxCOMPILE_TIME_ASSERT( sizeof(long) <= sizeof(void *), + wxArraySizeOfPtrLessSizeOfLong ); // < 32 symbols + // ============================================================================ // constants // ============================================================================ @@ -107,11 +112,14 @@ void name::Grow(size_t nIncrement) \ /* only do it if no more place */ \ if( m_nCount == m_nSize ) { \ 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 \ @@ -219,7 +227,8 @@ size_t name::IndexForInsert(T lItem, CMPFUNC fnCompare) const \ while ( lo < hi ) { \ i = (lo + hi)/2; \ \ - res = (*fnCompare)((const void *)lItem, (const void *)(m_pItems[i])); \ + res = (*fnCompare)((const void *)(long)lItem, \ + (const void *)(long)(m_pItems[i])); \ if ( res < 0 ) \ hi = i; \ else if ( res > 0 ) \