Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method GetSnapshotsOnComponent (LibOpt_Component component) remote as owning LibOpt_SnapshotComponents 
 | 
{ 
 | 
  Description: 
 | 
  [* 
 | 
    Return the `LibOpt_SnapshotComponents` that are created by the given component that are in an iteration with the current snapshot (the `this`). 
 | 
    In other words: find the `LibOpt_SnapshotComponents` that are created by the given component that have a path containing the current snapshot. 
 | 
     
 | 
    This is one of the ancestor snapshots, a set of children snapshots or neither. 
 | 
  *] 
 | 
  TextBody: 
 | 
  [* 
 | 
    result := construct( LibOpt_SnapshotComponents ); 
 | 
    if( this.Component().Depth() >= component.Depth() ) 
 | 
    { 
 | 
      // Walk up until we find the correct snapshot 
 | 
      parent := [LibOpt_Snapshot] this; 
 | 
      while( not isnull( parent ) and  
 | 
             guard( parent.astype( LibOpt_SnapshotComponent ).Component().Depth() > component.Depth(), true ) ) 
 | 
      { 
 | 
        parent := parent.Parent(); 
 | 
      } 
 | 
       
 | 
      if( guard( parent.astype( LibOpt_SnapshotComponent ).Component() = component, false ) ) 
 | 
      { 
 | 
        result.Add( parent.astype( LibOpt_SnapshotComponent ) ); 
 | 
      } 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      // Walk down to find the correct set of snapshots 
 | 
      children := construct( LibOpt_Snapshots ); 
 | 
      children.Add( this ); 
 | 
       
 | 
      while( children.Size() > 0 ) 
 | 
      { 
 | 
        children := selectset( children, Elements.Children, child, 
 | 
                               guard( child.astype( LibOpt_SnapshotComponent ).Component().Depth() <= component.Depth(), true ) ); 
 | 
        component_children := selectset( children, Elements.astype( LibOpt_SnapshotComponent ), snap, snap.Component() = component ); 
 | 
        if( component_children.Size() > 0 ) 
 | 
        { 
 | 
          result.AddInPlace( component_children ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return & result; 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |