Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
barrier.cpp
Go to the documentation of this file.
1// Copyright (C) 2024 Jarek Kobus
2// Copyright (C) 2024 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#include "barrier.h"
6
8
9namespace Tasking {
10
11// That's cut down qtcassert.{c,h} to avoid the dependency.
12#define QT_STRING(cond) qDebug("SOFT ASSERT: \"%s\" in %s: %s", cond, __FILE__, QT_STRINGIFY(__LINE__))
13#define QT_ASSERT(cond, action) if (Q_LIKELY(cond)) {} else { QT_STRING(#cond); action; } do {} while (0)
14
15void Barrier::setLimit(int value)
16{
17 QT_ASSERT(!isRunning(), return);
18 QT_ASSERT(value > 0, return);
19
20 m_limit = value;
21}
22
24{
25 QT_ASSERT(!isRunning(), return);
26 m_current = 0;
27 m_result.reset();
28}
29
31{
32 // Calling advance on finished is OK
33 QT_ASSERT(isRunning() || m_result, return);
34 if (!isRunning()) // no-op
35 return;
36 ++m_current;
37 if (m_current == m_limit)
39}
40
42{
43 // Calling stopWithResult on finished is OK when the same success is passed
44 QT_ASSERT(isRunning() || (m_result && *m_result == result), return);
45 if (!isRunning()) // no-op
46 return;
47 m_current = -1;
48 m_result = result;
49 emit done(result);
50}
51
52} // namespace Tasking
53
54QT_END_NAMESPACE
#define QT_STRING(cond)
Definition barrier.cpp:12
#define QT_ASSERT(cond, action)
Definition barrier.cpp:13
bool isRunning() const
Definition barrier.h:39
void stopWithResult(DoneResult result)
Definition barrier.cpp:41
void setLimit(int value)
Definition barrier.cpp:15
Combined button and popup list for selecting options.
\inmodule TaskingSolution