The Gaudi Framework  v32r0 (3325bb39)
concurrency::ActiveLineageScout Class Reference

#include <src/PRGraph/Visitors/Validators.h>

Inheritance diagram for concurrency::ActiveLineageScout:
Collaboration diagram for concurrency::ActiveLineageScout:

Public Member Functions

 ActiveLineageScout (const EventSlot *slot, const ControlFlowNode &node)
 Constructor. More...
 
bool visitEnter (AlgorithmNode &) const override
 
bool visitEnter (DataNode &) const override
 
bool visitEnter (ConditionNode &) const override
 
bool visit (DecisionNode &) override
 
void reset () override
 
virtual bool reply () const
 
virtual void visitParents (DecisionNode &)
 
- Public Member Functions inherited from concurrency::IGraphVisitor
virtual ~IGraphVisitor ()=default
 
virtual bool visitEnter (DecisionNode &) const
 
virtual bool visit (AlgorithmNode &)
 
virtual bool visit (DataNode &)
 
virtual bool visit (ConditionNode &)
 

Protected Attributes

const EventSlotm_slot
 
const ControlFlowNodem_startNode
 
bool m_active {true}
 
std::string m_previousNodeName
 

Detailed Description

Definition at line 33 of file Validators.h.

Constructor & Destructor Documentation

concurrency::ActiveLineageScout::ActiveLineageScout ( const EventSlot slot,
const ControlFlowNode node 
)
inline

Constructor.

Definition at line 36 of file Validators.h.

37  : m_slot( slot ), m_startNode( node ), m_previousNodeName( node.getNodeName() ){};
const ControlFlowNode & m_startNode
Definition: Validators.h:59
const EventSlot * m_slot
Definition: Validators.h:58

Member Function Documentation

virtual bool concurrency::ActiveLineageScout::reply ( ) const
inlinevirtual

Reimplemented in concurrency::SubSlotScout.

Definition at line 53 of file Validators.h.

53 { return m_active; };
void concurrency::ActiveLineageScout::reset ( )
inlineoverridevirtual

Reimplemented from concurrency::IGraphVisitor.

Reimplemented in concurrency::SubSlotScout.

Definition at line 48 of file Validators.h.

48  {
49  m_active = true;
51  };
const ControlFlowNode & m_startNode
Definition: Validators.h:59
const std::string & getNodeName() const
Get node name.
bool concurrency::ActiveLineageScout::visit ( DecisionNode node)
overridevirtual

Reimplemented from concurrency::IGraphVisitor.

Definition at line 25 of file Validators.cpp.

25  {
26 
27  // Test if this node is already resolved
28  if ( m_slot->controlFlowState[node.getNodeIndex()] != -1 ) {
29  m_active = false;
30  return m_active;
31  }
32 
33  // Test if the node that sent this scout is out-of-sequence in this node
34  if ( !node.m_modeConcurrent ) {
35 
36  for ( auto& child : node.getDaughters() ) {
37 
38  if ( child->getNodeName() == m_previousNodeName ) break;
39 
40  if ( m_slot->controlFlowState[child->getNodeIndex()] == -1 ) {
41  m_active = false;
42  return m_active;
43  }
44  }
45  }
46 
47  this->visitParents( node );
48 
49  return this->reply();
50  }
virtual void visitParents(DecisionNode &)
Definition: Validators.cpp:53
std::vector< int > controlFlowState
State of the control flow.
Definition: EventSlot.h:77
virtual bool reply() const
Definition: Validators.h:53
const EventSlot * m_slot
Definition: Validators.h:58
bool concurrency::ActiveLineageScout::visitEnter ( AlgorithmNode ) const
inlineoverridevirtual

Reimplemented from concurrency::IGraphVisitor.

Definition at line 42 of file Validators.h.

42 { return false; };
bool concurrency::ActiveLineageScout::visitEnter ( DataNode ) const
inlineoverridevirtual

Reimplemented from concurrency::IGraphVisitor.

Definition at line 43 of file Validators.h.

43 { return false; };
bool concurrency::ActiveLineageScout::visitEnter ( ConditionNode ) const
inlineoverridevirtual

Reimplemented from concurrency::IGraphVisitor.

Definition at line 44 of file Validators.h.

44 { return false; };
void concurrency::ActiveLineageScout::visitParents ( DecisionNode node)
virtual

Reimplemented in concurrency::SubSlotScout.

Definition at line 53 of file Validators.cpp.

53  {
54 
55  for ( auto& parent : node.m_parents ) {
56  m_active = true;
57  m_previousNodeName = node.getNodeName();
58  parent->accept( *this );
59 
60  // Any active parent means that this node is active
61  if ( this->reply() ) break;
62  }
63  }
virtual bool reply() const
Definition: Validators.h:53

Member Data Documentation

bool concurrency::ActiveLineageScout::m_active {true}
protected

Definition at line 60 of file Validators.h.

std::string concurrency::ActiveLineageScout::m_previousNodeName
protected

Definition at line 61 of file Validators.h.

const EventSlot* concurrency::ActiveLineageScout::m_slot
protected

Definition at line 58 of file Validators.h.

const ControlFlowNode& concurrency::ActiveLineageScout::m_startNode
protected

Definition at line 59 of file Validators.h.


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