libhatchet
Loading...
Searching...
No Matches
hxtask_dag_node.hpp
Go to the documentation of this file.
1#pragma once
2// SPDX-FileCopyrightText: © 2017-2026 Adrian Johnston.
3// SPDX-License-Identifier: MIT
4// This file is licensed under the MIT license found in the LICENSE.md file.
5
8
9#include "hxtask_queue.hpp"
10
11HX_NS_BEGIN_
12
24template<int32_t max_successors_=4>
25class hxtask_dag_node : public hxtask {
26public:
29
35 void add_successor(hxtask_dag_node* successor_, int priority_ = 0) hxattr_nonnull(2);
36
39 void reset(void) noexcept { m_predecessor_count_ = 0; m_successor_count_ = 0; }
40
44 void on_completion(hxtask_queue* q_) override { this->dag_node_completed_(q_, false); }
45
49 void on_failure(hxtask_queue* q_) override { this->dag_node_completed_(q_, true); }
50
54 void on_cancel(hxtask_queue* q_) override { this->dag_node_completed_(q_, true); }
55
56private:
57 class edge_t_ {
58 public:
59 hxtask_dag_node* node_;
60 int priority_;
61 };
62
63 void dag_node_completed_(hxtask_queue* q_, bool is_cancelled_);
64
65 int32_t m_predecessor_count_;
66 int32_t m_successor_count_;
67 edge_t_ m_successors_[max_successors_];
68};
69
70#include "detail/hxtask_dag_node.inl"
71HX_NS_END_
hxtask_dag_node<max_successors> - A hxtask subclass that implements DAG dependency tracking as a laye...
Definition hxtask_dag_node.hpp:25
hxtask_dag_node(void)
Constructs a node with no predecessors or successors.
void on_completion(hxtask_queue *q_) override
Propagates successful completion to successors.
Definition hxtask_dag_node.hpp:44
void on_cancel(hxtask_queue *q_) override
Cancels all successors.
Definition hxtask_dag_node.hpp:54
void add_successor(hxtask_dag_node *successor_, int priority_=0)
Records a dependency: successor runs after this node completes, enqueued at priority.
void reset(void) noexcept
Clears predecessors and successors.
Definition hxtask_dag_node.hpp:39
void on_failure(hxtask_queue *q_) override
Cancels all successors.
Definition hxtask_dag_node.hpp:49
hxtask - Pure virtual base class for operations to be performed on a different thread or at a later t...
Definition hxtask.hpp:23
friend class hxtask_queue
Definition hxtask.hpp:52
#define hxattr_nonnull(...)
hxattr_nonnull - Indicates that a function has args that should not be null.
Definition hxsettings.h:106
Provides a priority queue of tasks and a worker thread pool.