QVector: Save one copy-CTOR call if we don't realloc
Change-Id: Ie0f2eb922500bc3d76852939cf2c5d28d65a43ae Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
This commit is contained in:
parent
3378aa45c2
commit
1c33c37d4c
@ -600,16 +600,23 @@ Q_OUTOFLINE_TEMPLATE T QVector<T>::value(int i, const T &defaultValue) const
|
||||
template <typename T>
|
||||
void QVector<T>::append(const T &t)
|
||||
{
|
||||
const T copy(t);
|
||||
const bool isTooSmall = uint(d->size + 1) > d->alloc;
|
||||
if (!isDetached() || isTooSmall) {
|
||||
const T copy(t);
|
||||
QArrayData::AllocationOptions opt(isTooSmall ? QArrayData::Grow : QArrayData::Default);
|
||||
reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt);
|
||||
|
||||
if (QTypeInfo<T>::isComplex)
|
||||
new (d->end()) T(copy);
|
||||
else
|
||||
*d->end() = copy;
|
||||
|
||||
} else {
|
||||
if (QTypeInfo<T>::isComplex)
|
||||
new (d->end()) T(t);
|
||||
else
|
||||
*d->end() = t;
|
||||
}
|
||||
if (QTypeInfo<T>::isComplex)
|
||||
new (d->end()) T(copy);
|
||||
else
|
||||
*d->end() = copy;
|
||||
++d->size;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user