| 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; | 
|   *] | 
| } |