Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride FindOrCreateSharedWithout ( 
 | 
  LibOpt_ScopeThin scope 
 | 
) as LibOpt_ScopeShared 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    vector := NumberVector::Construct( this.Set() ); 
 | 
     
 | 
    vector.Set( scope.Index(), vector.Get( scope.Index() ).BitAnd( scope.Mask().BitNot() ) ); 
 | 
     
 | 
    // Determine the reduced size of the NumberVector 
 | 
    size := vector.Size(); 
 | 
    for( {}; size > 1 and vector.Get( size - 1 ) = 0; size-- ) 
 | 
    { } 
 | 
     
 | 
    group_vector := this.GroupVectorRemove( scope ); 
 | 
     
 | 
    result := null( LibOpt_ScopeShared ); 
 | 
    if( size = 1 ) 
 | 
    { 
 | 
      result := LibOpt_ScopeShared32::FindSet32( vector.Get( 0 ), this.Type(), group_vector ); 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
      if( size <> vector.Size() ) 
 | 
      { 
 | 
        vector.Resize( size ); 
 | 
      } 
 | 
      result := LibOpt_ScopeSharedVector::FindSetVector( vector.AsBinaryValue(), this.Type(), group_vector ); 
 | 
    } 
 | 
     
 | 
    if( isnull( result ) ) 
 | 
    { 
 | 
      owner := select( this, ScopeSharedOnScope.ScopeThin, s, s <> scope ); 
 | 
      if( size = 1 ) 
 | 
      { 
 | 
        result := owner.ScopeSharedOwned( relnew, 
 | 
                                          LibOpt_ScopeShared32, 
 | 
                                          Set := vector.Get( 0 ), 
 | 
                                          Type := this.Type(), 
 | 
                                          GroupVector := group_vector 
 | 
                                          ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        result := owner.ScopeSharedOwned( relnew, 
 | 
                                          LibOpt_ScopeSharedVector, 
 | 
                                          Set := vector.AsBinaryValue(), 
 | 
                                          Type := this.Type(), 
 | 
                                          GroupVector := group_vector 
 | 
                                          ); 
 | 
      } 
 | 
       
 | 
      traverse( this, ScopeSharedOnScope, ssos, ssos.ScopeThin() <> scope ) 
 | 
      { 
 | 
        LibOpt_ScopeSharedOnScope::Create( ssos.ScopeThin(), ssos.Group(), result ); 
 | 
      } 
 | 
    } 
 | 
     
 | 
    return result; 
 | 
  *] 
 | 
} 
 |