Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method AnalyzeGraph 
 | 
{ 
 | 
  Description: 'Analyze the component graph to find out at which points in the graph an `Algorithm` should be created and at which points it should be removed.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    subscribed_components := selectset( this, ChannelReader.Component, c, true ) 
 | 
                           .Union( selectset( this, ChannelWriter.Component, w, true ) ); 
 | 
     
 | 
    channel_components := LibOpt_Utility::GetDownstreamComponents( subscribed_components ); 
 | 
     
 | 
    traverse( channel_components, Elements, component ) 
 | 
    { 
 | 
      traverse( component, Parents, link ) 
 | 
      { 
 | 
        origin := link.GetOrigin(); 
 | 
        if( isnull( origin ) or channel_components.Find( origin ) < 0 ) 
 | 
        { 
 | 
          LibOpt_ChannelNotify::Create( this, link, true ); 
 | 
        } 
 | 
        else if( origin.istype( LibOpt_Iterator ) ) 
 | 
        { 
 | 
          LibOpt_ChannelNotify::Create( this, link, false ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |