summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/qarraydata
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/tools/qarraydata')
-rw-r--r--tests/auto/corelib/tools/qarraydata/simplevector.h23
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)