The Gaudi Framework  v30r3 (a5ef0a68)
concurrency::DecisionUpdater Class Reference

#include <src/PRGraphVisitors.h>

Inheritance diagram for concurrency::DecisionUpdater:
Collaboration diagram for concurrency::DecisionUpdater:

Public Member Functions

 DecisionUpdater (EventSlot &slot, const Cause &cause, bool ifTrace=false)
 Constructor. More...
 
bool visit (AlgorithmNode &) override
 
- Public Member Functions inherited from concurrency::IGraphVisitor
virtual ~IGraphVisitor ()=default
 
virtual bool visitEnter (DecisionNode &) const
 
virtual bool visit (DecisionNode &)
 
virtual bool visitEnter (AlgorithmNode &) const
 
virtual bool visitEnter (DataNode &) const
 
virtual bool visit (DataNode &)
 
virtual bool visitEnter (ConditionNode &) const
 
virtual bool visit (ConditionNode &)
 
virtual void reset ()
 

Public Attributes

EventSlotm_slot
 
Cause m_cause
 
bool m_trace
 

Detailed Description

Definition at line 38 of file PRGraphVisitors.h.

Constructor & Destructor Documentation

concurrency::DecisionUpdater::DecisionUpdater ( EventSlot slot,
const Cause cause,
bool  ifTrace = false 
)
inline

Constructor.

Definition at line 42 of file PRGraphVisitors.h.

Member Function Documentation

bool concurrency::DecisionUpdater::visit ( AlgorithmNode node)
overridevirtual

Reimplemented from concurrency::IGraphVisitor.

Definition at line 109 of file PRGraphVisitors.cpp.

110  {
111 
112  auto& states = m_slot->algsStates;
113  const AState& state = states[node.getAlgoIndex()];
114  int decision = -1;
115 
116  if ( true == node.isOptimist() )
117  decision = 1;
118  else if ( AState::EVTACCEPTED == state )
119  decision = !node.isLiar();
120  else if ( AState::EVTREJECTED == state )
121  decision = node.isLiar();
122 
123  if ( -1 != decision ) {
124 
125  m_slot->controlFlowState[node.getNodeIndex()] = decision;
126 
127  auto promoter = DataReadyPromoter( *m_slot, m_cause, m_trace );
128  for ( const auto& output : node.getOutputDataNodes() )
129  for ( auto& consumer : output->getConsumers() ) consumer->accept( promoter );
130 
132  for ( auto& p : node.getParentDecisionHubs() ) p->accept( vis );
133 
134  return true; // return true only if the algorithm produced a decision
135  }
136 
137  return false;
138  }
AlgsExecutionStates::State AState
AlgsExecutionStates algsStates
Vector of algorithms states.
Definition: EventSlot.h:49
std::vector< int > controlFlowState
State of the control flow.
Definition: EventSlot.h:53

Member Data Documentation

Cause concurrency::DecisionUpdater::m_cause

Definition at line 50 of file PRGraphVisitors.h.

EventSlot* concurrency::DecisionUpdater::m_slot

Definition at line 49 of file PRGraphVisitors.h.

bool concurrency::DecisionUpdater::m_trace

Definition at line 51 of file PRGraphVisitors.h.


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