public void MakeError_u(IReadMean[] par) { ScalarRes.CopyValueFrom(par[0]); if (par.Length != 4 || par[3].Boolean) { ScalarRes.Error = null; } ScalarRes.AddError(new MomErr(par[2].String, par[1].Integer)); PutErr(par[2].String, par[1].Integer); }
public void Max_uu(IReadMean[] par) { IReadMean mv = par[0]; for (int i = 1; i < par.Length; ++i) { if (mv.ValueLess(par[i])) { mv = par[i]; } } ScalarRes.CopyValueFrom(mv); }
//Вычисление скалярной функции для списков мгновенных значений internal IReadMean CalcScalar(DataType dataType, //Возвращаемый тип данных IReadMean[] par, //Список аргументов bool isComplex, //При вычислении используются флаги значений аргументов Action <IReadMean[], bool[]> action) //Действие, выполняющее вычисление для одного момента времени { SetScalarDataType(dataType); var mpar = new IReadMean[par.Length]; var cpar = new bool[par.Length]; bool isMom = !isComplex; for (int i = 0; i < par.Length; i++) { var mean = par[i] as Mean; if (mean != null) { mpar[i] = mean; } else { isMom = false; if (par[i].Count == 0 && !isComplex) { return(MFactory.NewList(dataType)); } } } if (isMom) //Одно значение { DateTime t = Static.MinDate; foreach (var mean in mpar) { if (mean.Time > t) { t = mean.Time; } } if (t == Static.MinDate) { t = PeriodBegin; } CalcScalarFun(mpar, () => action(mpar, cpar)); return(ScalarRes.ToMom(t)); } //Список значений var rlist = MFactory.NewList(dataType); while (true) { DateTime ctime = Static.MaxDate; foreach (var list in par) { if (list.NextTime < ctime) { ctime = list.NextTime; } } if (ctime == Static.MaxDate) { break; } for (int i = 0; i < par.Length; i++) { var list = par[i]; cpar[i] = list.NextTime == ctime; if (cpar[i]) { list.CurNum++; } mpar[i] = list.ToMean(); } CalcScalarFun(mpar, () => action(mpar, cpar)); rlist.AddMom(ScalarRes.ToMom(ctime)); } return(rlist); }
public void RemoveError_u(IReadMean[] par) { ScalarRes.CopyValueFrom(par[0]); }