From 8c49ae522d184deb5a9118ba2368629709ff6e85 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Mon, 12 Jul 2021 10:10:38 +0200 Subject: QDuplicateTracker: bring back appendTo() && MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c19695ab953c979f15bbc72c4f4a453e9a114cf6. Just because QSet has limited API doesn't mean we can't provide this in an efficient way for std::unordered_set :P Added tests. Pick-to: 6.2 Change-Id: I4f8f0e60c810acdc666cf34f929845227ed87f3b Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Lars Knoll --- src/corelib/tools/qduplicatetracker_p.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/corelib/tools') diff --git a/src/corelib/tools/qduplicatetracker_p.h b/src/corelib/tools/qduplicatetracker_p.h index 565d592ac2..8d64ee5371 100644 --- a/src/corelib/tools/qduplicatetracker_p.h +++ b/src/corelib/tools/qduplicatetracker_p.h @@ -105,6 +105,13 @@ class QDuplicateTracker { #endif Q_DISABLE_COPY_MOVE(QDuplicateTracker); public: + static constexpr inline bool uses_pmr = + #ifdef __cpp_lib_memory_resource + true + #else + false + #endif + ; QDuplicateTracker() = default; explicit QDuplicateTracker(qsizetype n) #ifdef __cpp_lib_memory_resource @@ -125,11 +132,22 @@ public: } template - void appendTo(C &c) const + void appendTo(C &c) const & { for (const auto &e : set) c.push_back(e); } + + template + void appendTo(C &c) && + { + if constexpr (uses_pmr) { + while (!set.empty()) + c.push_back(std::move(set.extract(set.begin()).value())); + } else { + return appendTo(c); // lvalue version + } + } }; QT_END_NAMESPACE -- cgit v1.2.3