diff options
author | Marc Mutz <marc.mutz@qt.io> | 2022-12-28 07:27:03 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-01-02 21:22:28 +0000 |
commit | a52f14634b339ec2c363e6499af1d06dd85f2be2 (patch) | |
tree | 360527b37df92562b54a32b305fd2cdb977d9f89 | |
parent | 61be55e688111a8b0ff86d42a698b5da74b6ddf7 (diff) | |
download | qttools-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.cpp | 29 |
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; } |