| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CreateStatistics (LibOpt_Run run, Type statistictype, LibOpt_Component component,  | 
|   output LibOpt_SnapshotLogEntrys snapshotlogentries_o) | 
| { | 
|   Description: 'Create `LibOpt_StatisticLogEntrys` of the given "statistictype" (`Type`) for the given "run" (`LibOpt_Run`) and "component" (`LibOpt_Component`).' | 
|   TextBody: | 
|   [* | 
|     // Get the set of log entry snapshots for the current component. | 
|     snapshotlogentries_component := selectset( snapshotlogentries_o, Elements, snapshotlogentry, | 
|                                                // FILTER | 
|                                                snapshotlogentry.GetComponent() = component | 
|                                              ); | 
|      | 
|     // For better performance on subsequent `selectset` operations on the "snapshotlogentries" set, remove snapshots that are no longer needed. | 
|     snapshotlogentries_o.Remove( snapshotlogentries_component ); | 
|      | 
|     // Get the unique set of log entry details. | 
|     logentrydetails_unique := selectuniquevalues( snapshotlogentries_component, Elements, snapshotlogentry, | 
|                                                   // FILTER | 
|                                                   true, | 
|                                                   // VALUE | 
|                                                   snapshotlogentry.Details() | 
|                                                 ); | 
|      | 
|     // For each unique log entry details, create a log entry statistic for the current component. | 
|     traverse( logentrydetails_unique, Elements, logentrydetails_current ) | 
|     { | 
|       // Generate a log entry statistic for the current component and current log entry details. | 
|       statisticsnapshotlogentry := LibOpt_StatisticLogEntry::Create( run, statistictype, | 
|                                                                              component, | 
|                                                                              logentrydetails_current | 
|                                                                            ); | 
|        | 
|       // Get the set of snapshot log entries (from the "component" set) which details matches "logentrydetails_current". | 
|       snapshotlogentries_current := selectset( snapshotlogentries_component, Elements, snapshotlogentry, | 
|                                                // FILTER | 
|                                                true, | 
|                                                // VALUE | 
|                                                snapshotlogentry.Details() = logentrydetails_current | 
|                                              ); | 
|        | 
|       // Link the set of log entry snapshots which details matches "snapshotlogentry" to the statistic just generated above. | 
|       traverse( snapshotlogentries_current, Elements, snapshotlogentry ) | 
|       { | 
|         statisticsnapshotlogentry.SnapshotLogEntry( relinsert, snapshotlogentry ); | 
|       } | 
|        | 
|       // For better performance on subsequent `selectset` operations on the "snapshotlogentries_component" set, remove snapshots that are no longer needed. | 
|       snapshotlogentries_component.Remove( snapshotlogentries_current ); | 
|     } | 
|   *] | 
| } |