diff options
Diffstat (limited to 'tests/auto/corelib/tools/qarraydata')
-rw-r--r-- | tests/auto/corelib/tools/qarraydata/simplevector.h | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h index 54c5fd2f61..a1eb2dac48 100644 --- a/tests/auto/corelib/tools/qarraydata/simplevector.h +++ b/tests/auto/corelib/tools/qarraydata/simplevector.h @@ -139,15 +139,22 @@ public: void reserve(size_t n) { - if (n > capacity() - || (n - && !d->capacityReserved - && (d->ref.isShared() || (d->capacityReserved = 1, false)))) { - SimpleVector detached(Data::allocate(n, - d->detachFlags() | Data::CapacityReserved)); - detached.d->copyAppend(constBegin(), constEnd()); - detached.swap(*this); + if (n == 0) + return; + + if (n <= capacity()) { + if (d->capacityReserved) + return; + if (!d->ref.isShared()) { + d->capacityReserved = 1; + return; + } } + + SimpleVector detached(Data::allocate(n, + d->detachFlags() | Data::CapacityReserved)); + detached.d->copyAppend(constBegin(), constEnd()); + detached.swap(*this); } void prepend(const_iterator first, const_iterator last) |