Quintiq file version 2.0 
 | 
#parent: #root 
 | 
MethodOverride Progress () declarative remote as Real 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    value := 1.0; 
 | 
     
 | 
    zero_duration := Duration::Zero(); 
 | 
    if( this.MaxIterations() > 0.0 
 | 
        and this.MaxDurationLocal() > zero_duration 
 | 
        and this.MaxDurationGlobal() > zero_duration ) 
 | 
    { 
 | 
      run := this.Iterator().Run(); 
 | 
      time := guard( run.LastSnapshot().TimeStamp(),  
 | 
                     ifexpr( run.StartedOn().IsFinite(), run.StartedOn(), run.CreatedOn() ) ); 
 | 
       
 | 
      iterations      := max( this, Iterator.Task.TaskContext.astype( LibOpt_TaskContextIterator ), context, context.NrOfIterations() / this.MaxIterations() ); 
 | 
      local_duration  := max( this, Iterator.Task.SnapshotComponent, context, ( time - context.TimeStamp() ) / this.MaxDurationLocal() ); 
 | 
      global_duration := ( time - this.Iterator().Run().StartedOn() ) / this.MaxDurationGlobal(); 
 | 
       
 | 
      value := maxvalue( 0.0, 
 | 
                         maxvalue( iterations, 
 | 
                                   maxvalue( local_duration, global_duration ) ) ); 
 | 
    } 
 | 
     
 | 
    return value; 
 | 
  *] 
 | 
} 
 |