]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/dynarray.cpp
don't mention GUI-only changes in the base section
[wxWidgets.git] / src / common / dynarray.cpp
index 61400eddf849f373de5ffbd1410a25ea125c7e08..1b3a0353b9703e132cbc220cec62dc3f992537c6 100644 (file)
   #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 )                                                     \