refactor(registry): drop CancellationToken (#1820)

Replace the CancellationToken class with a plain
std::atomic_bool member in DocsetRegistry.
This commit is contained in:
Oleg Shparber
2026-04-12 11:49:28 +03:00
committed by GitHub
parent 8e254d60d2
commit c1832ca935
6 changed files with 20 additions and 50 deletions
-1
View File
@@ -7,7 +7,6 @@ add_library(Registry STATIC
searchquery.cpp
# Show headers without .cpp in Qt Creator.
cancellationtoken.h
itemdatarole.h
searchresult.h
)
-29
View File
@@ -1,29 +0,0 @@
// Copyright (C) Oleg Shparber, et al. <https://zealdocs.org>
// Copyright (C) 2015 Artur Spychaj
// SPDX-License-Identifier: GPL-3.0-or-later
#ifndef ZEAL_REGISTRY_CANCELLATIONTOKEN_H
#define ZEAL_REGISTRY_CANCELLATIONTOKEN_H
#include <atomic>
namespace Zeal::Registry {
/// Token that stores whether cancel was called on it.
/// In async code can be used to check if another thread called cancel.
class CancellationToken
{
public:
inline bool isCanceled() const { return m_canceled; }
inline void cancel() { m_canceled = true; }
inline void reset() { m_canceled = false; }
private:
std::atomic_bool m_canceled{false};
};
} // namespace Zeal::Registry
#endif // ZEAL_REGISTRY_CANCELLATIONTOKEN_H
+2 -3
View File
@@ -4,7 +4,6 @@
#include "docset.h"
#include "cancellationtoken.h"
#include "searchresult.h"
#include <util/fuzzy.h>
@@ -310,7 +309,7 @@ const QMultiMap<QString, QUrl> &Docset::symbols(const QString &symbolType) const
return m_symbols[symbolType];
}
QList<SearchResult> Docset::search(const QString &query, const CancellationToken &token) const
QList<SearchResult> Docset::search(const QString &query, const std::atomic_bool &canceled) const
{
QString sql;
if (m_type == Docset::Type::Dash) {
@@ -351,7 +350,7 @@ QList<SearchResult> Docset::search(const QString &query, const CancellationToken
m_db->prepare(sql.arg(sanitizedQuery));
QList<SearchResult> results;
while (m_db->next() && !token.isCanceled()) {
while (m_db->next() && !canceled.load(std::memory_order_relaxed)) {
SearchResult result;
result.name = m_db->value(0).toString();
result.type = parseSymbolType(m_db->value(1).toString());
+3 -2
View File
@@ -11,6 +11,8 @@
#include <QMultiMap>
#include <QUrl>
#include <atomic>
namespace Zeal {
namespace Util {
@@ -19,7 +21,6 @@ class SQLiteDatabase;
namespace Registry {
class CancellationToken;
struct SearchResult;
class Docset final
@@ -50,7 +51,7 @@ public:
const QMultiMap<QString, QUrl> &symbols(const QString &symbolType) const;
QList<SearchResult> search(const QString &query, const CancellationToken &token) const;
QList<SearchResult> search(const QString &query, const std::atomic_bool &canceled) const;
QList<SearchResult> relatedLinks(const QUrl &url) const;
// FIXME: This a temporary solution to create URL on demand.
+12 -13
View File
@@ -18,7 +18,6 @@
#include <QtConcurrent>
#include <functional>
#include <future>
namespace Zeal::Registry {
@@ -200,7 +199,7 @@ QList<Docset *> DocsetRegistry::docsets() const
void DocsetRegistry::search(const QString &query)
{
m_cancellationToken.cancel();
m_cancelSearch.store(true, std::memory_order_relaxed);
if (query.isEmpty()) {
emit searchCompleted({});
@@ -212,7 +211,7 @@ void DocsetRegistry::search(const QString &query)
void DocsetRegistry::_runQuery(const QString &query)
{
m_cancellationToken.reset();
m_cancelSearch.store(false, std::memory_order_relaxed);
QList<Docset *> enabledDocsets;
@@ -227,22 +226,22 @@ void DocsetRegistry::_runQuery(const QString &query)
enabledDocsets = docsets();
}
QFuture<QList<SearchResult>> queryResultsFuture = QtConcurrent::mappedReduced(enabledDocsets,
std::bind(&Docset::search,
std::placeholders::_1,
searchQuery.query(),
std::ref(
m_cancellationToken)),
&MergeQueryResults);
QList<SearchResult> results = queryResultsFuture.result();
const QString queryString = searchQuery.query();
QFuture<QList<SearchResult>> queryFuture = QtConcurrent::mappedReduced(enabledDocsets,
std::bind(&Docset::search,
std::placeholders::_1,
queryString,
std::cref(m_cancelSearch)),
&MergeQueryResults);
QList<SearchResult> results = queryFuture.result();
if (m_cancellationToken.isCanceled()) {
if (m_cancelSearch.load(std::memory_order_relaxed)) {
return;
}
std::sort(results.begin(), results.end());
if (m_cancellationToken.isCanceled()) {
if (m_cancelSearch.load(std::memory_order_relaxed)) {
return;
}
+3 -2
View File
@@ -5,12 +5,13 @@
#ifndef ZEAL_REGISTRY_DOCSETREGISTRY_H
#define ZEAL_REGISTRY_DOCSETREGISTRY_H
#include "cancellationtoken.h"
#include "searchresult.h"
#include <QMap>
#include <QObject>
#include <atomic>
class QAbstractItemModel;
class QThread;
@@ -70,7 +71,7 @@ private:
QThread *m_thread = nullptr;
QMap<QString, Docset *> m_docsets;
CancellationToken m_cancellationToken;
std::atomic_bool m_cancelSearch{false};
};
} // namespace Zeal::Registry