172 bool foundNonResolvedChild =
false;
173 bool foundNegativeChild =
false;
174 bool foundPositiveChild =
false;
187 bool breakout =
false;
188 for (
unsigned int slotIndex : searchResult->second ) {
193 for (
auto child : node.getDaughters() ) {
197 if ( childDecision == -1 )
198 foundNonResolvedChild =
true;
199 else if ( childDecision == 1 )
200 foundPositiveChild =
true;
202 foundNegativeChild =
true;
204 if ( node.m_modePromptDecision ) {
205 if ( node.m_modeOR && foundPositiveChild ) {
209 }
else if ( !node.m_modeOR && foundNegativeChild ) {
215 if ( foundNonResolvedChild ) {
224 if ( breakout )
break;
227 for (
auto child : node.getDaughters() ) {
230 if ( childDecision == -1 )
231 foundNonResolvedChild =
true;
232 else if ( childDecision == 1 )
233 foundPositiveChild =
true;
235 foundNegativeChild =
true;
237 if ( node.m_modePromptDecision ) {
238 if ( node.m_modeOR && foundPositiveChild ) {
241 }
else if ( !node.m_modeOR && foundNegativeChild ) {
246 if ( foundNonResolvedChild )
break;
251 if ( !foundNonResolvedChild && decision == -1 ) {
252 if ( node.m_modeOR ) {
253 if ( foundPositiveChild )
258 if ( foundNegativeChild )
265 if ( node.m_inverted && decision == 1 )
267 else if ( node.m_inverted && decision == 0 )
270 if ( node.m_allPass && !foundNonResolvedChild ) decision = 1;
272 if ( decision != -1 ) {
276 if ( node.m_parents.size() == 1 ) {
277 node.m_parents[0]->accept( *
this );
279 auto scout = SubSlotScout(
m_slot, node );
280 for (
auto& p : node.m_parents ) {
282 if ( scout.reply() ) p->accept( *
this );
286 auto scout = ActiveLineageScout(
m_slot, node );
287 for (
auto& p : node.m_parents ) {
289 if ( scout.reply() ) p->accept( *
this );
294 if ( oldSlot )
m_slot = oldSlot;
301 for (
unsigned int slotIndex : searchResult->second ) {
306 for (
auto child : node.getDaughters() ) {
307 bool result = child->accept( *
this );
308 if ( !node.m_modeConcurrent )
316 for (
auto child : node.getDaughters() ) {
317 bool result = child->accept( *
this );
318 if ( !node.m_modeConcurrent )
323 if ( oldSlot )
m_slot = oldSlot;
std::string entryPoint
Event Views bookkeeping (TODO: optimize view bookkeeping)
Class representing an event slot.
std::vector< int > controlFlowState
State of the control flow.
std::vector< EventSlot > allSubSlots
Actual sub-slot instances.
EventSlot * parentSlot
Pointer to parent slot (null for top level)
std::unordered_map< std::string, std::vector< unsigned int > > subSlotsByNode
Listing of sub-slots by the node (name) they are attached to.