Ejemplo n.º 1
0
        //============================================================================
        /// <summary>
        /// Updates the current value of the variable in the output column. Handles
        /// aggregation within reporting intervals
        /// Assumes:
        ///  * aValue is a scalar of the correct type
        /// </summary>
        /// <param name="aValue"></param>
        //============================================================================
        public void Update(TTypedValue aValue)
        {
            switch (baseType)
            {
            case TTypedValue.TBaseType.ITYPE_INT1:
            case TTypedValue.TBaseType.ITYPE_INT2:
            case TTypedValue.TBaseType.ITYPE_INT4:
            case TTypedValue.TBaseType.ITYPE_INT8:
            {
                if (AggregCount == 0)
                {
                    dVal = aValue.asInt();
                }
                else
                {
                    switch (Aggreg)
                    {
                    case TGenericReporter.AggregType.aggSum: dVal = dVal + aValue.asInt();
                        break;

                    case TGenericReporter.AggregType.aggMax: dVal = Math.Max(dVal, aValue.asInt());
                        break;

                    case TGenericReporter.AggregType.aggMin: dVal = Math.Min(dVal, aValue.asInt());
                        break;
                    }
                }
            }
            break;

            case TTypedValue.TBaseType.ITYPE_SINGLE:
            {
                if (AggregCount == 0)
                {
                    dVal = aValue.asSingle();
                }
                else
                {
                    switch (Aggreg)
                    {
                    case TGenericReporter.AggregType.aggSum: dVal = dVal + aValue.asSingle();
                        break;

                    case TGenericReporter.AggregType.aggAve: dVal = (dVal * AggregCount + aValue.asSingle()) / (AggregCount + 1);
                        break;

                    case TGenericReporter.AggregType.aggMax: dVal = Math.Max(dVal, aValue.asSingle());
                        break;

                    case TGenericReporter.AggregType.aggMin: dVal = Math.Min(dVal, aValue.asSingle());
                        break;
                    }
                }
            }
            break;

            case TTypedValue.TBaseType.ITYPE_DOUBLE:
            {
                if (AggregCount == 0)
                {
                    dVal = aValue.asDouble();
                }
                else
                {
                    switch (Aggreg)
                    {
                    case TGenericReporter.AggregType.aggSum: dVal = dVal + aValue.asDouble();
                        break;

                    case TGenericReporter.AggregType.aggAve: dVal = (dVal * AggregCount + aValue.asDouble()) / (AggregCount + 1);
                        break;

                    case TGenericReporter.AggregType.aggMax: dVal = Math.Max(dVal, aValue.asDouble());
                        break;

                    case TGenericReporter.AggregType.aggMin: dVal = Math.Min(dVal, aValue.asDouble());
                        break;
                    }
                }
            }
            break;

            case TTypedValue.TBaseType.ITYPE_BOOL:
            {
                if (AggregCount == 0)
                {
                    sVal = aValue.asBool().ToString();
                }
                else
                {
                    switch (Aggreg)
                    {
                    case TGenericReporter.AggregType.aggMax:
                    {
                        bool bVal = Convert.ToBoolean(sVal) || aValue.asBool();
                        sVal = bVal.ToString();
                    }
                    break;

                    case TGenericReporter.AggregType.aggMin:
                    {
                        bool bVal = Convert.ToBoolean(sVal) && aValue.asBool();
                        sVal = bVal.ToString();
                    }
                    break;
                    }
                }
            }
            break;

            case TTypedValue.TBaseType.ITYPE_CHAR:
            case TTypedValue.TBaseType.ITYPE_STR:
            {
                if (AggregCount == 0)
                {
                    sVal = aValue.asStr();
                }
            }
            break;
            }
            AggregCount++;
        }