///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// Copyright (c) 2000-2019 Ericsson Telecom AB                               //
//                                                                           //
// All rights reserved. This program and the accompanying materials          //
// are made available under the terms of the Eclipse Public License v2.0     //
// which accompanies this distribution, and is available at                  //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html                                 //
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//  Module: EPTF_CLL_StatMeasure_Definitions
// 
//  Purpose:
//    This module contains type definitions for TTCN-3 EPTF StatMeasure 
//    implementation.
// 
//  Module Parameters:
//    tsp_EPTF_StatMeasure_loggingComponentMask - *charstring* - component-type mask for logging, default value: "EPTF_StatMeasure"
//
//  Module depends on:
//    <EPTF_CLL_Variable_Definitions>
//    <EPTF_CLL_Logging_Definitions>
// 
//  Current Owner:
//    Jozsef Gyurusi (ETHJGI)
// 
//  Last Review Date:
//    2009-05-14
//
//  Detailed Comments:
//    This module contains type definitions for TTCN-3 EPTF StatMeasure 
//    implementation.
// 
///////////////////////////////////////////////////////////////////////////////

module EPTF_CLL_StatMeasure_Definitions {

import from EPTF_CLL_Variable_Definitions all;
import from EPTF_CLL_Common_Definitions all;
import from EPTF_CLL_Logging_Definitions all;

modulepar charstring tsp_EPTF_StatMeasure_loggingComponentMask := "EPTF_StatMeasure";

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_statType
// 
//  Purpose:
//     Declares the possible types of statistics
//
//  Elements:
//    content - content of the variable
//    delta - newValue-oldValue
//    deltaSum - newValue-initialValue
//    min - minimal value ever
//    max - maximal value ever
//    mean - mean value
//    standardDev - standard deviation and mean
//    EPS - measures the number of events during a refresh period (events/sec), 
//          and the time of measurement. For variables the events are the 
//          refresh events
//    chrono - measures the time of measurement in sec. For variables it 
//             measures the time between start and the last refresh event
//    density - measures the density function: counts the values that falls
//              into user given boundaries
//    percentile95 - measures 95% statistics: the smallest number that is 
//                   greater than the 95% of elements in the given data set
//    percentileP - measures P% statistics: the smallest number that is 
//                   greater than the P% of elements in the given data set
//    limits - calculates a statusLED from a float value based on given limits
//             for LED values		
//
//    custom - measures custom defined statistics: computes user stat
//
//  Detailed Comments:
//   ALG III of http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
//   is used to calculate mean and variance:
//
//   n = 0
//   mean = 0
//   S = 0
//
//   foreach x in data:
//     n = n + 1
//     delta = x - mean
//     mean = mean + delta/n
//     S = S + delta*(x - mean)      // This expression uses the new value of mean
//   end for
//
//   standardDev = S/n
//
//
//  For the EPS statistics its update function <f_EPTF_StatMeasure_update_EPS> 
//  should be called when the EPS value should be updated. The measuring of 
//  the EPS events is restarted from here.
//    
///////////////////////////////////////////////////////////////////////////////
type enumerated EPTF_StatMeasure_statType {
  content, // content of the variable
  delta,  // newValue-oldValue
  deltaSum,// newValue-initialValue
  min,// minimal value ever
  max,// maximal value ever
  mean,// mean value
  standardDev, // standard deviation and mean (if this is chosen, mean is 
               // also calculated)
  EPS, // measures the number of events during a refresh period (events/sec), 
       // and the time of measurement. For variables the events are the refresh 
       // events
  chrono, // measures the time of measurement in sec. For variables it measures 
          // the time between start and the last refresh event
  density, // measures the density function: counts the values that falls 
           // into user given boundaries
  percentile95, // measures 95% statistics: the smallest number that is 
                // greater than the 95% of elements in the given data set
  percentileP,  // measures P% statistics: the smallest number that is 
                // greater than the P% of elements in the given data set
  limits,  // calculates a statusLED from a float value based on given limits
           // for LED values		
  custom // measures custom defined statistics: computes user stat
  //...
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_StatParams
// 
//  Purpose:
//     Defines the type of parameters of the different statistics
//
//  Elements:
//    content - content of the variable
//    delta - newValue-oldValue
//    deltaSum - newValue-initialValue
//    min - minimal value ever
//    max - maximal value ever
//    mean - mean value
//    standardDev - standard deviation and mean
//    EPS - measures the number of events during a refresh period (events/sec), 
//          and the time of measurement. For variables the events are the 
//          refresh events
//    chrono - measures the time of measurement in sec. For variables it 
//             measures the time between start and the last refresh event
//    density - measures the density function: counts the values that falls
//              into user given boundaries
//    percentile95 - measures 95% statistics: the smallest number that is 
//                   greater than the 95% of elements in the given data set
//    percentileP - measures P% statistics: the smallest number that is 
//                   greater than the P% of elements in the given data set
//    custom - measures custom defined statistics: computes user stat
//
//  Detailed Comments:
//    
///////////////////////////////////////////////////////////////////////////////
type union EPTF_StatMeasure_StatParams {
  EPTF_StatMeasure_ContentPar content,
  EPTF_StatMeasure_DeltaPar delta,
  EPTF_StatMeasure_DeltaSumPar deltaSum,
  EPTF_StatMeasure_MinPar min,
  EPTF_StatMeasure_MaxPar max,
  EPTF_StatMeasure_MeanPar mean,
  EPTF_StatMeasure_StandardDevPar standardDev,
  EPTF_StatMeasure_EPSPar EPS,
  EPTF_StatMeasure_ChronoPar chrono,
  EPTF_StatMeasure_DensityPar density,
  EPTF_StatMeasure_Percentile95Par percentile95,
  EPTF_StatMeasure_PercentilePPar percentileP,
  EPTF_StatMeasure_LimitsPar limits,
  EPTF_StatMeasure_CustomPar custom
  //...
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_ContentPar
// 
//  Purpose:
//     Declares the type the parameters of the content statistics
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_ContentPar {
}
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_DeltaPar
// 
//  Purpose:
//     Declares the type the parameters of the delta statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_DeltaPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_DeltaSumPar
// 
//  Purpose:
//     Declares the type the parameters of the deltaSum statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_DeltaSumPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_MinPar
// 
//  Purpose:
//     Declares the type the parameters of the min statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_MinPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_MaxPar
// 
//  Purpose:
//     Declares the type the parameters of the max statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_MaxPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_MeanPar
// 
//  Purpose:
//     Declares the type the parameters of the mean statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_MeanPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_StandardDevPar
// 
//  Purpose:
//     Declares the type the parameters of the standardDev statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_StandardDevPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_EPSPar
// 
//  Purpose:
//     Declares the type the parameters of the EPS statistics
//
///////////////////////////////////////////////////////////////////////////////
type record of EPTF_StatMeasure_EPSPar_union EPTF_StatMeasure_EPSPar;

// note: the record of union makes it possible to use old config files containing {} without modification
type union EPTF_StatMeasure_EPSPar_union {
  boolean registerDefaultUpdate
}
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_ChronoPar
// 
//  Purpose:
//     Declares the type the parameters of the chrono statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_ContentPar EPTF_StatMeasure_ChronoPar;
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_DensityPar
// 
//  Purpose:
//     Declares the type the parameters of the density statistics
//
///////////////////////////////////////////////////////////////////////////////
type union EPTF_StatMeasure_DensityPar {
  EPTF_FloatList boundaries,
  EPTF_StatMeasure_Scale scale
};
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_Percentile95Par
// 
//  Purpose:
//     Declares the type the parameters of the percentile95 statistics
//
///////////////////////////////////////////////////////////////////////////////
type EPTF_StatMeasure_DensityPar EPTF_StatMeasure_Percentile95Par;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_PercentilePPar
// 
//  Purpose:
//     Declares the type the parameters of the percentileP statistics
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_PercentilePPar {
  float valueP,
  EPTF_StatMeasure_DensityPar density
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_LimitItem
// 
//  Purpose:
//     Declares the different limits for all <EPTF_LEDColors>
//     if omit: means -infinity
//
///////////////////////////////////////////////////////////////////////////////
type union EPTF_StatMeasure_LimitItem {
  float blueLimit,
  float blackLimit,
  float yellowLimit,
  float greenLimit,
  float redLimit
};

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_LimitList
// 
//  Purpose:
//     Declares the list of the different limits for all <EPTF_LEDColors>
//
///////////////////////////////////////////////////////////////////////////////
type record of EPTF_StatMeasure_LimitItem EPTF_StatMeasure_LimitList;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_LimitsPar
// 
//  Purpose:
//     Declares the type the parameters of the limits statistics
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_LimitsPar {
  integer referenceVarId, // if present, this is the id of the reference variable
     // to calculate relative value from. If not given tha value is absolute.
     // (the value of Variable used to create the stat from) minus (the value of Variable with referenceVarId id is compared to the limits)
  EPTF_LEDColors defaultColor, // the default color of the LED
  boolean enableValueInLEDText, // if true, the value of the last data is shown in the text of the LED
  EPTF_StatMeasure_LimitList limits // the limits for different LED colors
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_CustomPar
// 
//  Purpose:
//     Declares the type the parameters of the custom statistics
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_CustomPar {
}
//...

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_Scale
// 
//  Purpose:
//     Declares the type the scales supported by Density, PercentileP and Percentile95 stats
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_Scale {
  float min, 
  float max, 
  integer n, 
  EPTF_StatMeasure_density_scale scale 
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_contentData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_contentData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_contentData {
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_deltaData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_deltaData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_deltaData {
  EPTF_Var_DirectContent prevContent,   // auxiliary data (previous content)
  EPTF_Var_DirectContent statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_deltaSumData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_deltaSumData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_deltaSumData {
  EPTF_Var_DirectContent iniContent,   // auxiliary data (initialContent)
  EPTF_Var_DirectContent statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_minData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_minData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_minData {
  EPTF_Var_DirectContent statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_maxData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_maxData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_maxData {
  EPTF_Var_DirectContent statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_meanData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_meanData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_meanData {
  integer n,   // auxiliary data for Alg III. (number of data)
  float x,   // auxiliary data for Alg III.
  float delta,   // auxiliary data for Alg III.
  float statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_standardDevData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_standardDevData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_standardDevData {
  integer meanIdx,   // the index of the 'mean' statistics that is needed to 
                     // calculate this standardDev
  float S,     // auxiliary data for Alg III. (sum)
  float statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_EPSData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_EPSData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_EPSData {
  integer n,   // number of refreshes
  float statValue, // the current value of the stat
  float startTime, // time when the measurement was started
  float measurementLength   // length of the measurement in seconds
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_chronoData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_chronoData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_chronoData {
  float statValue, // the current value of the stat
  float startTime, // time when the measurement was started
  float stopTime  // time when stop was called
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_density_scale
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_density_scale
//
///////////////////////////////////////////////////////////////////////////////
type enumerated EPTF_StatMeasure_density_scale {
  userDefined,
  linear,
  logarithmic
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_densityData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_densityData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_densityData {
  EPTF_FloatList boundaries,  // the boundaries for the density function
  EPTF_IntegerList statValue, // counts the values between the boundaries, the 
                              //last element contains the counter for data > 
                              // last boundary
  integer createdBoundaryVarIdx // the idx of the EPTF Variable created from 
                       // this stat (containing the boundaries) (-1: no var)
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_percentile95Data
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_percentile95Data
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_percentile95Data {
  integer percentilePIdx // the index of the 'percentileP' statistics that is needed 
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_percentilePData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_percentilePData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_percentilePData {
  integer densityIdx, // the index of the 'density' statistics that is needed 
  // to calculate this Pth percentile
  integer maxIdx,     // the index of the 'max' statistics that is needed 
  // to calculate this Pth percentile
  float   pos,        // position of the current percentile P element
  integer curBIdx,    // index of the current boundary used as stat value
  integer lower,      // sum of elements under current boundary
  integer current,    // elements in current boundary
  float   statValue,  // the current value of the stat
  float   valueP,     // the P value of Pth percentile
  integer createdValuePVarIdx // the idx of the EPTF Variable created to
                      // store the percentileP value (-1: no var)  
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_limitsData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_limitsData
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_limitsData {
  integer referenceVarId, // if present, this is the id of the reference variable.
     //  the value of Variable with valueVarId id minus the value of Variable with referenceVarId id is compared to the limits
  EPTF_StatMeasure_LimitList limits, // the limits for different LED colors
  EPTF_LEDColors defaultColor, // the default color of the LED
  boolean enableValueInLEDText, // if true, the value of the last data is shown in the text of the LED
  EPTF_StatusLED statValue // the current value of the stat
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_addData_FT
// 
//  Purpose:
//     Function type for user defined statistics function (addData)
//
//     Usage: user registered function is inteded to update statistics
//            value (either based on corresponding variable or provided new
//            value). 
//
//            If statistic is created from a variable, the function
//            is subscribed to the variable as a post processing function.
//
//            Mandatory function.
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_addData_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList,
    in EPTF_Var_DirectContent pl_newData)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_newStat_FT
// 
//  Purpose:
//     Function type to create user defined statistics
//
//     Mandatory function.
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_newStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_getStat_FT
// 
//  Purpose:
//     Function type for get user defined statistics value
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_getStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList,
    out EPTF_Var_DirectContent pl_statValue)
runs on self return boolean;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_stat2Str_FT
// 
//  Purpose:
//     Function type to convert statistic value to charstring
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_stat2Str_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_createVarFromStat_FT
// 
//  Purpose:
//     Function type for create var from user defined statistics type
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_createVarFromStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList,
    in charstring pl_varName)
runs on self return integer;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_resetStat_FT
// 
//  Purpose:
//     Function type to reset user defined statistic
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_resetStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_enableStat_FT
// 
//  Purpose:
//     Function type to enable user defined statistics
//
//     Statistics updates should be available only when stat is enabled
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_enableStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_disableStat_FT
// 
//  Purpose:
//     Function type to disable user defined statistics
//
//     Statistics updates shouldn't be available when stat is disabled
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_disableStat_FT(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_startStat_FT
// 
//  Purpose:
//     Function type to user defined statistics measurement
//
///////////////////////////////////////////////////////////////////////////////
type function EPTF_StatMeasure_CustomFunctions(
    in integer pl_statIdx, 
    in EPTF_IntegerList pl_argList)
runs on self;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_Custom_Functions
// 
//  Purpose:
//     Container to store user defined functions and their current argument 
//     lists for custom statistics 
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_customData 
{
  charstring                       statName,  
  EPTF_StatMeasure_newStat_FT      newStatFn,
  EPTF_IntegerList                 newStatFnArgList,
  EPTF_StatMeasure_addData_FT      addDataFn,
  EPTF_IntegerList                 addDataFnArgList,
  EPTF_StatMeasure_getStat_FT      getStatFn,
  EPTF_IntegerList                 getStatFnArgList,
  EPTF_StatMeasure_stat2Str_FT     stat2StrFn,
  EPTF_IntegerList                 stat2StrFnArgList,
  EPTF_StatMeasure_createVarFromStat_FT createVarFromStatFn,
  EPTF_IntegerList                 createVarFromStatFnArgList,
  EPTF_StatMeasure_resetStat_FT    resetStatFn,
  EPTF_IntegerList                 resetStatFnArgList,
  EPTF_StatMeasure_enableStat_FT   enableStatFn,
  EPTF_IntegerList                 enableStatFnArgList,
  EPTF_StatMeasure_disableStat_FT  disableStatFn,
  EPTF_IntegerList                 disableStatFnArgList
}

// union of databases for stats
///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_statData
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_statData
//
///////////////////////////////////////////////////////////////////////////////
type union EPTF_StatMeasure_statData {
  EPTF_StatMeasure_contentData content,
  EPTF_StatMeasure_deltaData delta,
  EPTF_StatMeasure_deltaSumData deltaSum,
  EPTF_StatMeasure_minData min,
  EPTF_StatMeasure_maxData max,
  EPTF_StatMeasure_meanData mean,
  EPTF_StatMeasure_standardDevData standardDev,
  EPTF_StatMeasure_EPSData EPS,
  EPTF_StatMeasure_chronoData chrono,
  EPTF_StatMeasure_densityData density,
  EPTF_StatMeasure_percentile95Data percentile95,
  EPTF_StatMeasure_percentilePData percentileP,
  EPTF_StatMeasure_limitsData limits,
  EPTF_StatMeasure_customData custom
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_Statistics
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_Statistics
//
///////////////////////////////////////////////////////////////////////////////
type record EPTF_StatMeasure_Statistics {
  integer varIdx, // index of the EPTF variable it is calculated from 
                  // (where it's postProc is registered)
  integer createdVarIdx, // the idx of the EPTF Variable created from this 
                         // stat (containing the statValue) (-1: no var)
  EPTF_StatMeasure_statData statData, // type of stat
  boolean enabled, // true if statistics measuring is enabled, false if not
  boolean reset    // true after the reset, addData will change it to false
}

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_StatisticsList
// 
//  Purpose:
//     Declares the type EPTF_StatMeasure_StatisticsList
//
///////////////////////////////////////////////////////////////////////////////
type record of EPTF_StatMeasure_Statistics EPTF_StatMeasure_StatisticsList;

///////////////////////////////////////////////////////////////////////////////
//  Type: EPTF_StatMeasure_CT
// 
//  Purpose:
//   Maintain certain stand-alone statistics or statistics calculated from 
//   an EPTF Variable.
// 
//  Elements:
//
//  Detailed Comments:
//   To use the EPTF Statistics Measure, extend your component 
//   with <EPTF_StatMeasure_CT>
//
///////////////////////////////////////////////////////////////////////////////
type component EPTF_StatMeasure_CT 
  extends EPTF_Var_CT, EPTF_Logging_CT 
{
  private var EPTF_StatMeasure_StatisticsList statList := {}; // the database for all stats
  //var EPTF_StatMeasure_Custom_FunctionsList customStatFNs := {};
  private var boolean v_EPTF_StatMeasure_initialized := false; // init flag

  // logging
  private var integer v_StatMeasure_loggingMaskId := c_EPTF_Logging_invalidMaskId;  
}

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_StatMeasure_loggingEventClasses
// 
//  Purpose:
//    list of logging event class names used on the StatMeasure
// 
//  Detailed Comments:
//    <EPTF_Logging_EventClassPrefixList> { "Warning", "Debug" }
///////////////////////////////////////////////////////////
const EPTF_Logging_EventClassPrefixList c_EPTF_StatMeasure_loggingEventClasses := { "Warning", "Debug" };

///////////////////////////////////////////////////////////
//  Constant: c_EPTF_StatMeasure_loggingClassIdx_Warning
// 
//  Purpose:
//    logging class index for Error
// 
//  Detailed Comments:
//    *0*
///////////////////////////////////////////////////////////
const integer c_EPTF_StatMeasure_loggingClassIdx_Warning := 0;
///////////////////////////////////////////////////////////
//  Constant: c_EPTF_StatMeasure_loggingClassIdx_Debug
// 
//  Purpose:
//    logging class index for Error
// 
//  Detailed Comments:
//    *1*
///////////////////////////////////////////////////////////
const integer c_EPTF_StatMeasure_loggingClassIdx_Debug := 1;

} // module
