The Gaudi Framework  v29r0 (ff2e7097)
concurrency::DecisionNode Class Reference

#include <src/PrecedenceRulesGraph.h>

Inheritance diagram for concurrency::DecisionNode:
Collaboration diagram for concurrency::DecisionNode:

Public Member Functions

 DecisionNode (PrecedenceRulesGraph &graph, unsigned int nodeIndex, const std::string &name, bool modeConcurrent, bool modePromptDecision, bool modeOR, bool allPass)
 Constructor. More...
 
 ~DecisionNode () override
 Destructor. More...
 
bool accept (IGraphVisitor &visitor) override
 Visitor entry point. More...
 
void addParentNode (DecisionNode *node)
 Add a parent node. More...
 
void addDaughterNode (ControlFlowNode *node)
 Add a daughter node. More...
 
const std::vector< ControlFlowNode * > & getDaughters () const
 Get children nodes. More...
 
void printState (std::stringstream &output, AlgsExecutionStates &states, const std::vector< int > &node_decisions, const unsigned int &recursionLevel) const override
 Print a string representing the control flow state. More...
 
- Public Member Functions inherited from concurrency::ControlFlowNode
 ControlFlowNode (PrecedenceRulesGraph &graph, unsigned int nodeIndex, const std::string &name)
 Constructor. More...
 
virtual ~ControlFlowNode ()
 Destructor. More...
 
const unsigned int & getNodeIndex () const
 Get node index. More...
 
const std::stringgetNodeName () const
 Get node name. More...
 

Public Attributes

bool m_modeConcurrent
 Whether all daughters will be evaluated concurrently or sequentially. More...
 
bool m_modePromptDecision
 Whether to evaluate the hub decision ASA its child decisions allow to do that. More...
 
bool m_modeOR
 Whether acting as "and" (false) or "or" node (true) More...
 
bool m_allPass
 Whether always passing regardless of daughter results. More...
 
std::vector< ControlFlowNode * > m_children
 All direct daughter nodes in the tree. More...
 
std::vector< DecisionNode * > m_parents
 Direct parent nodes. More...
 
- Public Attributes inherited from concurrency::ControlFlowNode
PrecedenceRulesGraphm_graph
 

Additional Inherited Members

- Protected Member Functions inherited from concurrency::ControlFlowNode
std::string stateToString (const int &stateId) const
 Translation between state id and name. More...
 
- Protected Attributes inherited from concurrency::ControlFlowNode
unsigned int m_nodeIndex
 
std::string m_nodeName
 

Detailed Description

Definition at line 364 of file PrecedenceRulesGraph.h.

Constructor & Destructor Documentation

concurrency::DecisionNode::DecisionNode ( PrecedenceRulesGraph graph,
unsigned int  nodeIndex,
const std::string name,
bool  modeConcurrent,
bool  modePromptDecision,
bool  modeOR,
bool  allPass 
)
inline

Constructor.

Definition at line 368 of file PrecedenceRulesGraph.h.

370  : ControlFlowNode( graph, nodeIndex, name )
371  , m_modeConcurrent( modeConcurrent )
372  , m_modePromptDecision( modePromptDecision )
373  , m_modeOR( modeOR )
374  , m_allPass( allPass )
375  , m_children()
376  {
377  }
ControlFlowNode(PrecedenceRulesGraph &graph, unsigned int nodeIndex, const std::string &name)
Constructor.
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.
bool m_allPass
Whether always passing regardless of daughter results.
bool m_modeOR
Whether acting as "and" (false) or "or" node (true)
bool m_modePromptDecision
Whether to evaluate the hub decision ASA its child decisions allow to do that.
bool m_modeConcurrent
Whether all daughters will be evaluated concurrently or sequentially.
concurrency::DecisionNode::~DecisionNode ( )
override

Destructor.

Definition at line 28 of file PrecedenceRulesGraph.cpp.

29  {
30 
31  for ( auto node : m_children ) delete node;
32  }
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.

Member Function Documentation

bool concurrency::DecisionNode::accept ( IGraphVisitor visitor)
overridevirtual

Visitor entry point.

Implements concurrency::ControlFlowNode.

Definition at line 61 of file PrecedenceRulesGraph.cpp.

62  {
63 
64  if ( visitor.visitEnter( *this ) ) {
65  // try to aggregate a decision
66  bool result = visitor.visit( *this );
67 
68  // if a decision was made for this node, propagate the result upwards
69  if ( result ) {
70  for ( auto parent : m_parents ) {
71  parent->accept( visitor );
72  }
73  return false;
74  }
75 
76  // if no decision can be made yet, request further information downwards
77  for ( auto child : m_children ) {
78  bool result = child->accept( visitor );
79  if ( !m_modeConcurrent )
80  if ( result ) break; // stop on first unresolved child if its decision hub is sequential
81  }
82 
83  return true; // visitor was accepted to try to aggregate the node's decision
84  }
85 
86  return false; // visitor was rejected (since the decision node has an aggregated decision already)
87  }
std::vector< DecisionNode * > m_parents
Direct parent nodes.
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.
bool m_modeConcurrent
Whether all daughters will be evaluated concurrently or sequentially.
void concurrency::DecisionNode::addDaughterNode ( ControlFlowNode node)

Add a daughter node.

Definition at line 42 of file PrecedenceRulesGraph.cpp.

43  {
44 
45  if ( std::find( m_children.begin(), m_children.end(), node ) == m_children.end() ) m_children.push_back( node );
46  }
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.
T find(T...args)
void concurrency::DecisionNode::addParentNode ( DecisionNode node)

Add a parent node.

Definition at line 35 of file PrecedenceRulesGraph.cpp.

36  {
37 
38  if ( std::find( m_parents.begin(), m_parents.end(), node ) == m_parents.end() ) m_parents.push_back( node );
39  }
std::vector< DecisionNode * > m_parents
Direct parent nodes.
T find(T...args)
const std::vector<ControlFlowNode*>& concurrency::DecisionNode::getDaughters ( ) const
inline

Get children nodes.

Definition at line 389 of file PrecedenceRulesGraph.h.

389 { return m_children; }
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.
void concurrency::DecisionNode::printState ( std::stringstream output,
AlgsExecutionStates states,
const std::vector< int > &  node_decisions,
const unsigned int &  recursionLevel 
) const
overridevirtual

Print a string representing the control flow state.

Implements concurrency::ControlFlowNode.

Definition at line 49 of file PrecedenceRulesGraph.cpp.

51  {
52 
53  output << std::string( recursionLevel, ' ' ) << m_nodeName << " (" << m_nodeIndex << ")"
54  << ", w/ decision: " << stateToString( node_decisions[m_nodeIndex] ) << "(" << node_decisions[m_nodeIndex]
55  << ")" << std::endl;
56 
57  for ( auto daughter : m_children ) daughter->printState( output, states, node_decisions, recursionLevel + 2 );
58  }
std::vector< ControlFlowNode * > m_children
All direct daughter nodes in the tree.
T endl(T...args)
std::string stateToString(const int &stateId) const
Translation between state id and name.
STL class.

Member Data Documentation

bool concurrency::DecisionNode::m_allPass

Whether always passing regardless of daughter results.

Definition at line 403 of file PrecedenceRulesGraph.h.

std::vector<ControlFlowNode*> concurrency::DecisionNode::m_children

All direct daughter nodes in the tree.

Definition at line 405 of file PrecedenceRulesGraph.h.

bool concurrency::DecisionNode::m_modeConcurrent

Whether all daughters will be evaluated concurrently or sequentially.

Definition at line 396 of file PrecedenceRulesGraph.h.

bool concurrency::DecisionNode::m_modeOR

Whether acting as "and" (false) or "or" node (true)

Definition at line 401 of file PrecedenceRulesGraph.h.

bool concurrency::DecisionNode::m_modePromptDecision

Whether to evaluate the hub decision ASA its child decisions allow to do that.

Applicable to both concurrent and sequential cases.

Definition at line 399 of file PrecedenceRulesGraph.h.

std::vector<DecisionNode*> concurrency::DecisionNode::m_parents

Direct parent nodes.

Definition at line 407 of file PrecedenceRulesGraph.h.


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