| Quintiq file version 2.0 | 
| #parent: #root | 
| Method FindOrCreateScopeShared (String type, LibOpt_Group group) as LibOpt_ScopeShared | 
| { | 
|   Description: | 
|   [* | 
|     Get the `LibOpt_ScopeShared` that is only linked to this `LibOpt_ScopeThin` and no others. | 
|      | 
|     If it does not exist, create it. | 
|   *] | 
|   TextBody: | 
|   [* | 
|     result := null( LibOpt_ScopeShared ); | 
|      | 
|     group_vector := null( NumberVector, owning ); | 
|     if( isnull( group ) ) | 
|     { | 
|       group_vector := NumberVector::Construct( 0 ); | 
|     } | 
|     else | 
|     { | 
|       group_vector := NumberVector::Construct( this.ID() + 1 ); | 
|       group_vector.Set( this.ID(), group.ID() ); | 
|     } | 
|     group_vector_bv := group_vector.AsBinaryValue(); | 
|     if( this.Index() = 0 ) | 
|     { | 
|       result := LibOpt_ScopeShared32::FindSet32( this.Mask(), type, group_vector_bv ); | 
|        | 
|       if( isnull( result ) ) | 
|       { | 
|         result := this.ScopeSharedOwned( relnew, | 
|                                          LibOpt_ScopeShared32, | 
|                                          Set := this.Mask(), | 
|                                          Type := type, | 
|                                          GroupVector := group_vector_bv | 
|                                          ); | 
|        | 
|         LibOpt_ScopeSharedOnScope::Create( this, group, result ); | 
|       } | 
|     } | 
|     else | 
|     { | 
|       vector := NumberVector::Construct( this.Index() + 1 ); | 
|       vector.Set( this.Index(), this.Mask() ) | 
|       vector_bv := vector.AsBinaryValue(); | 
|       result := LibOpt_ScopeSharedVector::FindSetVector( vector_bv, type, group_vector_bv ); | 
|        | 
|       if( isnull( result ) ) | 
|       { | 
|         result := this.ScopeSharedOwned( relnew, | 
|                                          LibOpt_ScopeSharedVector, | 
|                                          Set := vector_bv, | 
|                                          Type := type, | 
|                                          GroupVector := group_vector_bv | 
|                                          ); | 
|        | 
|         LibOpt_ScopeSharedOnScope::Create( this, group, result ); | 
|       } | 
|     } | 
|      | 
|      | 
|     return result; | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |