Beispiel #1
0
 private void AddUniformMom(IReadMean fromList, MomList toList, int i, DateTime t)
 {
     if (i < fromList.Count && fromList.TimeI(i) == t)
     {
         return;
     }
     toList.AddMom(fromList.ToMomI(i == 0 ? 0 : i - 1, t));
 }
Beispiel #2
0
 //Добавка мгновенного значения в список или клон
 //Возвращает количество реально добавленных значений
 internal override int AddMom(DateTime time, MomErr err)
 {
     if (!CheckMomTime(time, err))
     {
         return(0);
     }
     MomList.AddMom(BufMom);
     return(1);
 }
Beispiel #3
0
        //Агрегация по равномерным сегментам
        //На входе функция с параметрами: текущий результат, список и обрабатываемый номер
        private void Agregate(Action <EditMom, MomList, int, DateTime> fun)
        {
            double seglen = _pars[0].Real, segshift = _pars.Length < 2 ? 0 : _pars[1].Real * seglen;
            var    moms = _initialSignal.OutValue;

            if (moms.Count == 0)
            {
                return;
            }
            var mlist = MFactory.NewList(DataType);
            //Добавляем в список границы сегментов
            var t = Connect.PeriodBegin;
            int i = 0;

            while (t < Connect.PeriodEnd.AddMilliseconds(1))
            {
                while (i < moms.Count && moms.TimeI(i) < t)
                {
                    if (moms.TimeI(i) >= Connect.PeriodBegin && moms.TimeI(i) <= Connect.PeriodEnd)
                    {
                        mlist.AddMom(moms.ToMomI(i));
                    }
                    i++;
                }
                AddUniformMom(moms, mlist, i, t);
                t = t.AddSeconds(seglen);
            }
            if (i < moms.Count && moms.TimeI(i) == Connect.PeriodEnd)
            {
                mlist.AddMom(moms.ToMomI(i));
            }

            t = Connect.PeriodBegin;
            i = 0;
            while (t < Connect.PeriodEnd.AddMilliseconds(-1))
            {
                var me = new EditMom(DataType, t.AddSeconds(segshift));
                if (fun.Method.Name == "AverageScalar")
                {
                    me.Real = 0;
                }
                else
                {
                    me.CopyValueFrom(mlist, i);
                }
                t = t.AddSeconds(seglen);
                while (i < mlist.Count && mlist.TimeI(i) <= t)
                {
                    fun(me, mlist, i++, t);
                }
                if (i > 0 && mlist.TimeI(i - 1) == t)
                {
                    i--;
                }
                MomList.AddMom(me);
            }
        }
Beispiel #4
0
 //Добавляет значение среза на начало периода в список, возвращает 1, если срез был получен, иначе 0
 internal override int MakeBegin()
 {
     if (!HasBegin)
     {
         return(0);
     }
     MomList.AddMom(_beginMom);
     return(1);
 }
Beispiel #5
0
        //Взятие бита, pars[0] - номер бита
        public void Bit()
        {
            int bit  = _pars[0].Integer;
            var moms = _initialSignal.OutValue;

            for (int i = 0; i < moms.Count; i++)
            {
                MomList.AddMom(moms.TimeI(i), moms.IntegerI(i).GetBit(bit), moms.ErrorI(i));
            }
        }
Beispiel #6
0
        //Взятие битов и сложение по Or, pars - номера битов
        public void BitOr()
        {
            var moms = _initialSignal.OutValue;

            for (int i = 0; i < moms.Count; i++)
            {
                var  v   = moms.IntegerI(i);
                bool res = false;
                foreach (var par in _pars)
                {
                    res |= v.GetBit(par.Integer);
                }
                MomList.AddMom(moms.TimeI(i), res, moms.ErrorI(i));
            }
        }
Beispiel #7
0
 //Добавка мгновенного значения в список или клон
 //Возвращает количество реально добавленных значений
 internal override int AddMom(DateTime time, MomErr err)
 {
     BufMom.Time  = time;
     BufMom.Error = err;
     if (time <= Connect.PeriodBegin)
     {
         if (_beginMom.Time <= time)
         {
             _beginMom.CopyAllFrom(BufMom);
         }
     }
     else if (time <= Connect.PeriodEnd)
     {
         if (_endMom.Time <= time)
         {
             _endMom.CopyAllFrom(BufMom);
         }
         MomList.AddMom(BufMom);
         return(1);
     }
     return(0);
 }