// Copyright (C) 2025 Jarek Kobus // Copyright (C) 2025 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only // Qt-Security score:significant reason:default #ifndef QTASKTREE_QCONDITIONAL_H #define QTASKTREE_QCONDITIONAL_H #include #include #include #if 0 #pragma qt_class(QConditional) #endif QT_BEGIN_NAMESPACE namespace QtTaskTree { class ConditionData; class ElseIfItem; class ElseItem; class Then; class ThenItem; class ElsePrivate; class ElseIfPrivate; class IfPrivate; class ThenPrivate; class ElseIfItemPrivate; class ElseItemPrivate; class ThenItemPrivate; } QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ElsePrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ElseIfPrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ElseIfItemPrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ElseItemPrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::IfPrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ThenPrivate) QT_DECLARE_QESDP_SPECIALIZATION_DTOR(QtTaskTree::ThenItemPrivate) namespace QtTaskTree { class If final { public: Q_TASKTREE_EXPORT explicit If(const ExecutableItem &condition); template >, bool> = true> explicit If(Handler &&handler) : If(QSyncTask(std::forward(handler))) {} QT_TASKTREE_DECLARE_SMFS(If, Q_TASKTREE_EXPORT) private: Q_TASKTREE_EXPORT friend ThenItem operator>>(const If &ifItem, const Then &thenItem); friend class ThenItem; ExecutableItem condition() const; QExplicitlySharedDataPointer d; }; class ElseIf final { public: Q_TASKTREE_EXPORT explicit ElseIf(const ExecutableItem &condition); template >, bool> = true> explicit ElseIf(Handler &&handler) : ElseIf(QSyncTask(std::forward(handler))) {} QT_TASKTREE_DECLARE_SMFS(ElseIf, Q_TASKTREE_EXPORT) private: friend class ElseIfItem; ExecutableItem condition() const; QExplicitlySharedDataPointer d; }; class Else final { public: Q_TASKTREE_EXPORT explicit Else(const GroupItems &children); Q_TASKTREE_EXPORT explicit Else(std::initializer_list children); QT_TASKTREE_DECLARE_SMFS(Else, Q_TASKTREE_EXPORT) private: friend class ElseItem; Group body() const; QExplicitlySharedDataPointer d; }; class Then final { public: Q_TASKTREE_EXPORT explicit Then(const GroupItems &children); Q_TASKTREE_EXPORT explicit Then(std::initializer_list children); QT_TASKTREE_DECLARE_SMFS(Then, Q_TASKTREE_EXPORT) private: friend class ThenItem; Group body() const; QExplicitlySharedDataPointer d; }; class ThenItem final { public: Q_TASKTREE_EXPORT operator ExecutableItem() const; QT_TASKTREE_DECLARE_SMFS(ThenItem, Q_TASKTREE_EXPORT) private: ThenItem(const If &ifItem, const Then &thenItem); ThenItem(const ElseIfItem &elseIfItem, const Then &thenItem); Q_TASKTREE_EXPORT friend ElseItem operator>>(const ThenItem &thenItem, const Else &elseItem); Q_TASKTREE_EXPORT friend ElseIfItem operator>>(const ThenItem &thenItem, const ElseIf &elseIfItem); Q_TASKTREE_EXPORT friend ThenItem operator>>(const If &ifItem, const Then &thenItem); Q_TASKTREE_EXPORT friend ThenItem operator>>(const ElseIfItem &elseIfItem, const Then &thenItem); friend class ElseItem; friend class ElseIfItem; QList conditions() const; QExplicitlySharedDataPointer d; }; class ElseItem final { public: Q_TASKTREE_EXPORT operator ExecutableItem() const; QT_TASKTREE_DECLARE_SMFS(ElseItem, Q_TASKTREE_EXPORT) private: ElseItem(const ThenItem &thenItem, const Else &elseItem); Q_TASKTREE_EXPORT friend ElseItem operator>>(const ThenItem &thenItem, const Else &elseItem); QList conditions() const; QExplicitlySharedDataPointer d; }; class ElseIfItem final { public: QT_TASKTREE_DECLARE_SMFS(ElseIfItem, Q_TASKTREE_EXPORT) private: ElseIfItem(const ThenItem &thenItem, const ElseIf &elseIfItem); Q_TASKTREE_EXPORT friend ThenItem operator>>(const ElseIfItem &elseIfItem, const Then &thenItem); Q_TASKTREE_EXPORT friend ElseIfItem operator>>(const ThenItem &thenItem, const ElseIf &elseIfItem); friend class ThenItem; QList conditions() const; ExecutableItem nextCondition() const; QExplicitlySharedDataPointer d; }; } // namespace QtTaskTree QT_END_NAMESPACE #endif // QTASKTREE_QCONDITIONAL_H