Go to the documentation of this file.
24 <<
" 'Concurrent'/'Prompt' contradiction(s) found. Settings are mutually exclusive within a task group. "
25 "Discarding 'Prompt' for ";
71 parent->accept( *
this );
74 if ( this->
reply() )
break;
94 parent->accept( *
this );
97 if ( this->
reply() )
break;
100 if ( oldSlot )
m_slot = oldSlot;
107 propValidator.visit( node );
121 for (
const auto& parent : node.
m_parents ) {
122 this->
visit( *parent );
135 this->
visit( *parent );
153 producer->accept( scout );
155 if ( scout.negative() ) {
158 pr.first->second.
insert( producer );
162 pr.first->second.
insert( producer );
184 pr.first->second.
insert( producer );
197 status <<
" Conditional (C) and/or unconditional (U) topology violations found in the DF realm:\n\n";
202 status <<
" (U): " << upr.first->name() <<
" <---- |";
203 for (
const auto& algo : upr.second )
204 status <<
" " << algo->name() <<
" (U)"
210 for (
const auto& algo : result->second )
211 status <<
" " << algo->name() <<
" (C)"
223 status <<
" (C): " << cpr.first->name() <<
" <---- |";
224 for (
const auto& algo : cpr.second )
225 status <<
" " << algo->name() <<
" (C)"
246 m_lowlinks.insert( { &nodeAt, { lowlink_init, lowlink_init } } );
250 for (
const auto& consumer :
output->getConsumers() ) {
251 consumer->accept( *
this );
258 if ( consumer == &nodeAt )
m_scc.insert( { lowlink, { &nodeAt } } );
264 if ( lowlink_init == lowlink ) {
265 if (
m_scc.find( lowlink ) ==
m_scc.end() )
m_scc.insert( { lowlink, {} } );
267 for (
auto stackNodeRIter =
m_stack.rbegin(); stackNodeRIter !=
m_stack.rend(); ++stackNodeRIter ) {
269 bool lastSCCNodeOnStack{ *stackNodeRIter == &nodeAt };
273 if ( lastSCCNodeOnStack )
break;
285 m_status <<
" Strongly connected components found in DF realm:";
287 for (
auto& pr :
m_scc ) {
288 if ( pr.second.size() > 1 ) {
292 std::vector sortedSCC( pr.second.begin(), pr.second.end() );
297 for (
const auto& algoPtr : pr.second )
m_status <<
" " << algoPtr->name() <<
" |";
visitor_book m_conditionalProducers
std::ostringstream m_status
Class representing an event slot.
std::string m_previousNodeName
const std::string & name() const
Get node name.
bool visit(DecisionNode &) override
const std::vector< DataNode * > & getOutputDataNodes() const
Get all supplier nodes.
bool m_modePromptDecision
Whether to evaluate the hub decision ASA its child decisions allow to do that.
virtual bool reply() const
const std::vector< DecisionNode * > & getParentDecisionHubs() const
Get all parent decision hubs.
bool visit(AlgorithmNode &nodeAt) override
std::string entryPoint
Event Views bookkeeping (TODO: optimize view bookkeeping)
std::vector< AlgorithmNode * > m_stack
bool visit(DataNode &) override
std::unordered_map< AlgorithmNode *, std::pair< unsigned int, unsigned int > > m_lowlinks
EventSlot * parentSlot
Pointer to parent slot (null for top level)
visitor_book m_unconditionalProducers
bool visit(DecisionNode &) override
bool m_modeConcurrent
Whether all daughters will be evaluated concurrently or sequentially.
const std::vector< ControlFlowNode * > & getDaughters() const
Get children nodes.
bool on_stack(const AlgorithmNode &node) const
virtual void visitParents(DecisionNode &)
std::map< unsigned int, std::vector< AlgorithmNode * > > m_scc
std::vector< int > controlFlowState
State of the control flow.
std::vector< DecisionNode * > m_parents
Direct parent nodes.
bool reply() const override
void visitParents(DecisionNode &) override
bool visit(DecisionNode &) override
std::string reply() const
std::ostringstream m_status
unsigned int m_nodes_count
const std::vector< AlgorithmNode * > & getProducers() const
Get all data object producers.
const unsigned int & getNodeIndex() const
Get node index.