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
43 void on_completion(hxtask_queue* q_) override { this->dag_node_completed_(q_, false); }
44
47 void on_failure(hxtask_queue* q_) override { this->dag_node_completed_(q_, true); }
48
51 void on_cancel(hxtask_queue* q_) override { this->dag_node_completed_(q_, true); }
52
53private:
54 class edge_t_ {
55 public:
56 hxtask_dag_node* node_;
57 int priority_;
58 };
59
60 void dag_node_completed_(hxtask_queue* q_, bool is_cancelled_);
61
62 int32_t m_predecessor_count_;
63 int32_t m_successor_count_;
64 edge_t_ m_successors_[max_successors_];
65};
66
67#include "detail/hxtask_dag_node.inl"
68HX_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:43
void on_cancel(hxtask_queue *q_) override
Cancels all successors.
Definition hxtask_dag_node.hpp:51
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:47
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:97
Provides a priority queue of tasks and a worker thread pool.