Quintiq file version 2.0
|
#parent: #root
|
Method Copy (LibOpt_Component start_component, LibOpt_ScopeElements scope_elements) as LibOpt_Run
|
{
|
Description: 'This method copies the `LibOpt_Component` structure of this `LibOpt_Run` into a new run while allowing for a new Start Component and using the `scope_elements` parameter as the start scope.'
|
TextBody:
|
[*
|
run := this.Optimizer().CreateRun();
|
// Copy the components and contexts
|
occ := ObjectCopyComponent::Create();
|
traverse( this, Component, component )
|
{
|
component.Copy( occ, run );
|
}
|
traverse( this, RunContext, context )
|
{
|
context.Copy( occ, run );
|
}
|
|
freeze_propagation := false;
|
occ.Execute( freeze_propagation );
|
|
// Copy settings
|
run.DebugScope( this.DebugScope() );
|
run.InOneTransaction( this.InOneTransaction() );
|
// Copy the start component
|
if( not isnull( start_component ) )
|
{
|
run.SetStartComponent( start_component.Name() );
|
}
|
|
// Copy the start scope
|
if( not isnull( scope_elements ) )
|
{
|
scope := LibOpt_Scope::Create( run );
|
scope.Add( scope_elements );
|
run.SetStartScope( scope );
|
}
|
|
// Some components and contexts may have overridden the default copy behavior. Execute the post-copy initialization:
|
// first context (more static data)
|
traverse( run, RunContext, context_copy )
|
{
|
context_copy.InitAsCopy( this );
|
}
|
// then components (may rely on contexts)
|
traverse( this, Component, component_original )
|
{
|
component_copy := selectobject( run, Component, c, c.Name() = component_original.Name() );
|
component_copy.InitAsCopyOf( component_original );
|
}
|
|
return run;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|