void nsTArray_base::ShrinkCapacity(size_type elemSize) { if (mHdr == &sEmptyHdr || UsesAutoArrayBuffer()) return; if (mHdr->mLength >= mHdr->mCapacity) // should never be greater than... return; size_type length = Length(); if (IsAutoArray() && GetAutoArrayBuffer()->mCapacity >= length) { Header* header = GetAutoArrayBuffer(); // Copy data, but don't copy the header to avoid overwriting mCapacity header->mLength = length; memcpy(header + 1, mHdr + 1, length * elemSize); NS_Free(mHdr); mHdr = header; return; } if (length == 0) { NS_ASSERTION(!IsAutoArray(), "autoarray should have fit 0 elements"); NS_Free(mHdr); mHdr = &sEmptyHdr; return; } size_type size = sizeof(Header) + length * elemSize; void *ptr = NS_Realloc(mHdr, size); if (!ptr) return; mHdr = static_cast<Header*>(ptr); mHdr->mCapacity = length; }
nsMemoryImpl::Realloc(void* aPtr, size_t aSize) { return NS_Realloc(aPtr, aSize); }
nsMemoryImpl::Realloc(void* ptr, size_t size) { return NS_Realloc(ptr, size); }