42
42
explicit SearchTask(QObject* parent = 0);
44
bool wasCanceled() const;
44
bool wasCanceled() const { return loadCancellation() != NotCanceled; }
45
int progress() const { return acquireProgress(); }
47
const QString& text() const { return m_text; }
48
bool matchCase() const { return m_matchCase; }
49
bool wholeWords() const { return m_wholeWords; }
55
59
void start(const QVector< Model::Page* >& pages,
56
const QString& text, bool matchCase, int beginAtPage = 1);
60
const QString& text, bool matchCase, bool wholeWords, int beginAtPage = 1);
62
void cancel() { setCancellation(); }
61
65
Q_DISABLE_COPY(SearchTask)
63
67
QAtomicInt m_wasCanceled;
64
68
mutable QAtomicInt m_progress;
76
void setCancellation();
77
void resetCancellation();
78
bool testCancellation();
79
int loadCancellation() const;
81
void releaseProgress(int value);
82
int acquireProgress() const;
83
int loadProgress() const;
66
86
QVector< Model::Page* > m_pages;
95
#if QT_VERSION > QT_VERSION_CHECK(5,0,0)
97
inline void SearchTask::setCancellation()
99
m_wasCanceled.storeRelease(Canceled);
102
inline void SearchTask::resetCancellation()
104
m_wasCanceled.storeRelease(NotCanceled);
107
inline bool SearchTask::testCancellation()
109
return m_wasCanceled.load() != NotCanceled;
112
inline int SearchTask::loadCancellation() const
114
return m_wasCanceled.load();
117
inline void SearchTask::releaseProgress(int value)
119
m_progress.storeRelease(value);
122
inline int SearchTask::acquireProgress() const
124
return m_progress.loadAcquire();
127
inline int SearchTask::loadProgress() const
129
return m_progress.load();
134
inline void SearchTask::setCancellation()
136
m_wasCanceled.fetchAndStoreRelease(Canceled);
139
inline void SearchTask::resetCancellation()
141
m_wasCanceled.fetchAndStoreRelease(NotCanceled);
144
inline bool SearchTask::testCancellation()
146
return !m_wasCanceled.testAndSetRelaxed(NotCanceled, NotCanceled);
149
inline int SearchTask::loadCancellation() const
151
return m_wasCanceled;
154
inline void SearchTask::releaseProgress(int value)
156
m_progress.fetchAndStoreRelease(value);
159
inline int SearchTask::acquireProgress() const
161
return m_progress.fetchAndAddAcquire(0);
164
inline int SearchTask::loadProgress() const
76
173
#endif // SEARCHTHREAD_H