libhatchet
Loading...
Searching...
No Matches
hxtask_dag_node< max_successors_ > Class Template Reference

#include <hxtask_dag_node.hpp>

Public Member Functions

 hxtask_dag_node (void)
void add_successor (hxtask_dag_node *successor_, int priority_=0)
void reset (void) noexcept
void on_completion (hxtask_queue *q_) override
void on_failure (hxtask_queue *q_) override
void on_cancel (hxtask_queue *q_) override
Public Member Functions inherited from hxtask
virtual bool execute (hxtask_queue *)=0
virtual const char * get_label (void) const

Detailed Description

template<int32_t max_successors_ = 4>
class hxtask_dag_node< max_successors_ >

hxtask_dag_node<max_successors> - A hxtask subclass that implements DAG dependency tracking as a layer on top of hxtask_queue.

To connect nodes use add_successor before enqueueing roots (those with no predecessors). WARNING: The DAG is not intended to be modified once submitted as add_successor does not implement locking. Successor nodes are enqueued automatically once all their predecessors complete successfully. If any predecessor fails or is cancelled, all successors are cancelled: they receive on_cancel rather than being enqueued. Subclasses that override on_completion, on_failure, or on_cancel must call the corresponding hxtask_dag_node base method to preserve task propagation.

  • max_successors : Maximum direct successors per node. Default is 4.

Constructor & Destructor Documentation

◆ hxtask_dag_node()

template<int32_t max_successors_ = 4>
hxtask_dag_node< max_successors_ >::hxtask_dag_node ( void )

Constructs a node with no predecessors or successors.

Member Function Documentation

◆ add_successor()

template<int32_t max_successors_ = 4>
void hxtask_dag_node< max_successors_ >::add_successor ( hxtask_dag_node< max_successors_ > * successor_,
int priority_ = 0 )

Records a dependency: successor runs after this node completes, enqueued at priority.

Not thread safe, must be called before enqueueing any root nodes.

  • successor : Non-null pointer to the dependent node.
  • priority : Priority at which successor will be enqueued.

◆ on_cancel()

template<int32_t max_successors_ = 4>
void hxtask_dag_node< max_successors_ >::on_cancel ( hxtask_queue * q_)
inlineoverridevirtual

Cancels all successors.

Subclass overrides must call hxtask_dag_node::on_cancel(q_).

Reimplemented from hxtask.

◆ on_completion()

template<int32_t max_successors_ = 4>
void hxtask_dag_node< max_successors_ >::on_completion ( hxtask_queue * q_)
inlineoverridevirtual

Propagates successful completion to successors.

Subclass overrides must call hxtask_dag_node::on_completion(q_).

Reimplemented from hxtask.

◆ on_failure()

template<int32_t max_successors_ = 4>
void hxtask_dag_node< max_successors_ >::on_failure ( hxtask_queue * q_)
inlineoverridevirtual

Cancels all successors.

Subclass overrides must call hxtask_dag_node::on_failure(q_).

Reimplemented from hxtask.

◆ reset()

template<int32_t max_successors_ = 4>
void hxtask_dag_node< max_successors_ >::reset ( void )
inlinenoexcept

Clears predecessors and successors.

WARNING: Do not use while the DAG is being executed.


The documentation for this class was generated from the following file: