Home | History | Annotate | Download | only in utils
      1 #include <android/utils/vector.h>
      2 #include <limits.h>
      3 
      4 extern void
      5 _avector_ensure( void**  items, size_t  itemSize, unsigned*  pMaxItems, unsigned  newCount )
      6 {
      7     unsigned  oldMax = *pMaxItems;
      8 
      9     if (newCount > oldMax) {
     10         unsigned  newMax = oldMax;
     11         unsigned  bigMax = UINT_MAX / itemSize;
     12 
     13         if (itemSize == 0) {
     14             AASSERT_FAIL("trying to reallocate array of 0-size items (count=%d)\n", newCount);
     15         }
     16 
     17         if (newCount > bigMax) {
     18             AASSERT_FAIL("trying to reallocate over-sized array of %d-bytes items (%d > %d)\n",
     19                          itemSize, newCount, bigMax);
     20         }
     21 
     22         while (newMax < newCount) {
     23             unsigned newMax2 = newMax + (newMax >> 1) + 4;
     24             if (newMax2 < newMax || newMax2 > bigMax)
     25                 newMax2 = bigMax;
     26             newMax = newMax2;
     27         }
     28 
     29         *items     = _android_array_realloc( *items, itemSize, newMax );
     30         *pMaxItems = newMax;
     31     }
     32 }
     33 
     34