internal static IAggregationData CreateAggregationData(MutableAggregation aggregation, IMeasure measure) { return(aggregation.Match <IAggregationData>( (msum) => { return measure.Match <IAggregationData>( (mdouble) => { return SumDataDouble.Create(msum.Sum); }, (mlong) => { return SumDataLong.Create((long)Math.Round(msum.Sum)); }, (invalid) => { throw new ArgumentException(); }); }, CreateCountData, CreateMeanData, CreateDistributionData, (mlval) => { return measure.Match <IAggregationData>( (mdouble) => { return LastValueDataDouble.Create(mlval.LastValue); }, (mlong) => { if (double.IsNaN(mlval.LastValue)) { return LastValueDataLong.Create(0); } return LastValueDataLong.Create((long)Math.Round(mlval.LastValue)); }, (invalid) => { throw new ArgumentException(); }); })); }
private static void CheckAggregation(IAggregation aggregation, IAggregationData aggregationData, IMeasure measure) { aggregation.Match <object>( (arg) => { measure.Match <object>( (arg1) => { if (!(aggregationData is ISumDataDouble)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg1) => { if (!(aggregationData is ISumDataLong)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg1) => { throw new ArgumentException(); }); return(null); }, (arg) => { if (!(aggregationData is ICountData)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg) => { if (!(aggregationData is IMeanData)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg) => { if (!(aggregationData is IDistributionData)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg) => { measure.Match <object>( (arg1) => { if (!(aggregationData is ILastValueDataDouble)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg1) => { if (!(aggregationData is ILastValueDataLong)) { throw new ArgumentException(CreateErrorMessageForAggregation(aggregation, aggregationData)); } return(null); }, (arg1) => { throw new ArgumentException(); }); return(null); }, (arg) => { throw new ArgumentException(); } ); }