summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@qt.io>2022-12-28 07:27:03 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-01-02 21:22:28 +0000
commita52f14634b339ec2c363e6499af1d06dd85f2be2 (patch)
tree360527b37df92562b54a32b305fd2cdb977d9f89
parent61be55e688111a8b0ff86d42a698b5da74b6ddf7 (diff)
downloadqttools-a52f14634b339ec2c363e6499af1d06dd85f2be2.tar.gz
Assistant: port HelpEngineWrapper from QSharedPointer to unique_ptr
The only reason why the code used a shared instead of a unique ptr, apart from possibly predating C++11, is that the container in which the pointer is held, QMap, doesn't support move-only types. Now that QMap is but a wrapper around std::map, use the Real Thing™, and gain move-only type support for free. Replace a QPair with a proper struct with named members. Change-Id: Ic8d5529c5b03fa570553c8f81d7f9a721a167246 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io> (cherry picked from commit 2af5aa043da14b4b6b0d064cc59e6bfbe18231f5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/assistant/assistant/helpenginewrapper.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/assistant/assistant/helpenginewrapper.cpp b/src/assistant/assistant/helpenginewrapper.cpp
index 9565680d8..b08bb213e 100644
--- a/src/assistant/assistant/helpenginewrapper.cpp
+++ b/src/assistant/assistant/helpenginewrapper.cpp
@@ -8,8 +8,6 @@
#include <QtCore/QDateTime>
#include <QtCore/QFileInfo>
#include <QtCore/QFileSystemWatcher>
-#include <QtCore/QPair>
-#include <QtCore/QSharedPointer>
#include <QtCore/QTimer>
#include <QtHelp/QHelpContentModel>
#include <QtHelp/QHelpEngine>
@@ -18,6 +16,9 @@
#include <QtHelp/QHelpLink>
#include <QtHelp/QHelpSearchEngine>
+#include <map>
+#include <memory>
+
QT_BEGIN_NAMESPACE
namespace {
@@ -75,8 +76,11 @@ private:
QHelpEngine * const m_helpEngine;
QFileSystemWatcher * const m_qchWatcher;
- typedef QPair<QDateTime, QSharedPointer<TimeoutForwarder> > RecentSignal;
- QMap<QString, RecentSignal> m_recentQchUpdates;
+ struct RecentSignal {
+ QDateTime timestamp;
+ std::unique_ptr<TimeoutForwarder> forwarder;
+ };
+ std::map<QString, RecentSignal> m_recentQchUpdates;
};
HelpEngineWrapper *HelpEngineWrapper::helpEngineWrapper = nullptr;
@@ -727,7 +731,7 @@ void HelpEngineWrapperPrivate::qchFileChanged(const QString &fileName,
* signal more than once.
*/
if (ns.isEmpty()) {
- m_recentQchUpdates.remove(fileName);
+ m_recentQchUpdates.erase(fileName);
return;
}
@@ -742,19 +746,22 @@ void HelpEngineWrapperPrivate::qchFileChanged(const QString &fileName,
// Case 1: This is the first recent signal for the file.
if (it == m_recentQchUpdates.end()) {
- QSharedPointer<TimeoutForwarder> forwarder(new TimeoutForwarder(fileName));
- m_recentQchUpdates.insert(fileName, RecentSignal(now, forwarder));
- QTimer::singleShot(UpdateGracePeriod, forwarder.data(),
+ auto forwarder = std::make_unique<TimeoutForwarder>(fileName);
+ QTimer::singleShot(UpdateGracePeriod, forwarder.get(),
&TimeoutForwarder::forward);
+ m_recentQchUpdates.emplace(fileName,
+ RecentSignal{std::move(now), std::move(forwarder)});
return;
}
+ auto &[key, entry] = *it;
+
// Case 2: The last signal for this file has not expired yet.
- if (it.value().first > now.addMSecs(-UpdateGracePeriod)) {
+ if (entry.timestamp > now.addMSecs(-UpdateGracePeriod)) {
if (!fromTimeout)
- it.value().first = now;
+ entry.timestamp = now;
else
- QTimer::singleShot(UpdateGracePeriod, it.value().second.data(),
+ QTimer::singleShot(UpdateGracePeriod, entry.forwarder.get(),
&TimeoutForwarder::forward);
return;
}