diff options
| author | Andrei Golubev <andrei.golubev@qt.io> | 2020-10-28 18:14:21 +0100 |
|---|---|---|
| committer | Lars Knoll <lars.knoll@qt.io> | 2020-11-04 11:22:03 +0100 |
| commit | 2e8656779ac3eee8567ce2bf8eda233f4c5e3620 (patch) | |
| tree | e31419d216afba652b7f6b6df11a1519c2690db4 /src/corelib/tools/qarraydataops.h | |
| parent | 8f7016252a846e30efb617d2e20e929579772456 (diff) | |
Introduce QADP::reallocateGrow()
Added realloc() code path to QMovableArrayOps
Implemented fast realloc() based growing for QADP and used it in
QList::emplaceBack. This gives quite a bit of speedup and shows better
results than 5.15 at 100k+ iterations of "list.append(elem)", meanwhile
also closing a gap between movable types
Task-number: QTBUG-87330
Change-Id: I42fc182ecd93c85600dac622385152fc57735da8
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qarraydataops.h')
| -rw-r--r-- | src/corelib/tools/qarraydataops.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index 730476c2136..a864ac4c2b5 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -854,6 +854,10 @@ template <class T> struct QMovableArrayOps : QGenericArrayOps<T> { +protected: + typedef QTypedArrayData<T> Data; + +public: // using QGenericArrayOps<T>::appendInitialize; // using QGenericArrayOps<T>::copyAppend; // using QGenericArrayOps<T>::moveAppend; @@ -993,6 +997,13 @@ struct QMovableArrayOps (b++)->~T(); } while (b != e); } + + void reallocate(qsizetype alloc, QArrayData::AllocationOption option) + { + auto pair = Data::reallocateUnaligned(this->d, this->ptr, alloc, option); + this->d = pair.first; + this->ptr = pair.second; + } }; template <class T, class = void> |
