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