Quintiq file version 2.0 
 | 
#parent: #root 
 | 
DeclarativeOwningNMRelation CalcIterationPartNM 
 | 
{ 
 | 
  #keys: '1[139544.3.97808376]' 
 | 
  Expression: 
 | 
  [* 
 | 
    set := this.SnapshotOwning().IterationPart( relget ); 
 | 
    parent := this.SnapshotOwning().IterationPart().Parent(); 
 | 
     
 | 
    // Unrolled recursive calling of .Parent() in order to get all ancestors 
 | 
    // We expect unrolling 10 times should be enough. This is equal to 10 iterators in a path. 
 | 
     
 | 
    if( not isnull( parent ) ) // Depth 1 
 | 
    { 
 | 
      set := set.Union( parent ); 
 | 
      parent := parent.Parent(); 
 | 
      if( not isnull( parent ) ) // Depth 2 
 | 
      { 
 | 
        set := set.Union( parent ); 
 | 
        parent := parent.Parent(); 
 | 
        if( not isnull( parent ) ) // Depth 3 
 | 
        { 
 | 
          set := set.Union( parent ); 
 | 
          parent := parent.Parent(); 
 | 
          if( not isnull( parent ) ) // Depth 4 
 | 
          { 
 | 
            set := set.Union( parent ); 
 | 
            parent := parent.Parent(); 
 | 
            if( not isnull( parent ) ) // Depth 5 
 | 
            { 
 | 
              set := set.Union( parent ); 
 | 
              parent := parent.Parent(); 
 | 
              if( not isnull( parent ) ) // Depth 6 
 | 
              { 
 | 
                set := set.Union( parent ); 
 | 
                parent := parent.Parent(); 
 | 
                if( not isnull( parent ) ) // Depth 7 
 | 
                { 
 | 
                  set := set.Union( parent ); 
 | 
                  parent := parent.Parent(); 
 | 
                  if( not isnull( parent ) ) // Depth 8 
 | 
                  { 
 | 
                    set := set.Union( parent ); 
 | 
                    parent := parent.Parent(); 
 | 
                    if( not isnull( parent ) ) // Depth 9 
 | 
                    { 
 | 
                      set := set.Union( parent ); 
 | 
                      parent := parent.Parent(); 
 | 
                      if( not isnull( parent ) ) // Depth 10 
 | 
                      { 
 | 
                        set := set.Union( parent ); 
 | 
                        parent := parent.Parent(); 
 | 
                      } 
 | 
                    } 
 | 
                  } 
 | 
                } 
 | 
              } 
 | 
            } 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return & set; 
 | 
  *] 
 | 
  HelperRelation: IterationPart 
 | 
  InstantiationType: LibOpt_IterationPartNM 
 | 
  Relation: IterationPartNM 
 | 
} 
 |