| 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' } | 
| } |