diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2021-07-12 08:14:16 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-07-13 13:22:59 +0000 |
commit | 41a397701c515482e041501cd759c6482fd9b434 (patch) | |
tree | 65dab4b7aa944691ee2022302aff5f2d82b277d5 /src | |
parent | d95809470c3a2e3d57d43b6439515d12427f6de1 (diff) |
QDuplicateTracker: fix the static buffer size calculation
Instead of just sizeof(T), we, of course, also need to take the
support structure into account, to wit: the bucket list and, in the
node, the next pointer and the stored hash value.
Change-Id: I8227a95c49e316aacf3d4efd8f6170ea3bea1cf0
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 3c88e12beb22d8ea11b8a7006a71ba9773c6d183)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/tools/qduplicatetracker_p.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h index b457d9e499..4727a9aedd 100644 --- a/src/corelib/tools/qduplicatetracker_p.h +++ b/src/corelib/tools/qduplicatetracker_p.h @@ -73,7 +73,13 @@ class QDuplicateTracker { } }; - char buffer[Prealloc * sizeof(T)]; + struct node_guesstimate { void *next; size_t hash; T value; }; + static constexpr size_t bufferSize(size_t N) { + return N * sizeof(void*) // bucket list + + N * sizeof(node_guesstimate); // nodes + } + + char buffer[bufferSize(Prealloc)]; std::pmr::monotonic_buffer_resource res{buffer, sizeof buffer}; std::pmr::unordered_set<T, QHasher<T>> set{&res}; #else |