示例#1
0
        public void TestAddRangeFromArray()
        {
            var spread = new Spread <int>(0);

            spread.AddRange(sampleData);

            Assert.AreEqual(sampleData.Length, spread.SliceCount);
            for (int i = 0; i < sampleData.Length; i++)
            {
                Assert.AreEqual(sampleData[i], spread[i]);
            }
        }
示例#2
0
        public void TestAddRangeFromList()
        {
            var list   = sampleData.ToList();
            var spread = new Spread <int>(0);

            spread.AddRange(list);

            Assert.AreEqual(list.Count, spread.SliceCount);
            for (int i = 0; i < list.Count; i++)
            {
                Assert.AreEqual(list[i], spread[i]);
            }
        }
示例#3
0
        #pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (!FAddNow[0] && !FEditNow[0] && !FDeleteNow[0] && !FClear[0])
            {
                return;
            }
            if (FClear[0])
            {
                Store.SliceCount = 0;
            }

            if (FEditNow[0])
            {
                int count = Math.Max(FEditIndex.SliceCount, FEdit.SliceCount);

                for (int i = 0; i < count; i++)
                {
                    Store[FEditIndex[i]] = FEdit[i];
                }
            }

            if (FDeleteNow[0])
            {
                var del = FDeleteIndex.ToList();

                int size = Store.Count();

                for (int i = 0; i < del.Count; i++)
                {
                    del[i] = VMath.Zmod(del[i], size);
                }
                del.Sort();

                for (int i = 0; i < del.Count; i++)
                {
                    Store.RemoveAt(del[i] - i);
                }
            }

            if (FAddNow[0])
            {
                Store.AddRange(FAdd);
            }


            FOutput.SliceCount = 0;
            FOutput.AssignFrom(Store);
            FOutput.Flush();
        }
示例#4
0
文件: Levin.cs 项目: mechaz/vvvv-sdk
        public void Evaluate(int spreadMax)
        {
            FBuffer.ResizeAndDismiss(spreadMax, () => new Spread <double>());
            FDelta.SliceCount = spreadMax;

            //return null if one of the control inputs is null
            if (FDoInsert.IsAnyEmpty(FFrameCount, FReset))
            {
                FOutput.SliceCount = 0;
                return;
            }

            //Reset the BufferSlice
            if (FReset.IsChanged)
            {
                for (int i = 0; i < spreadMax; i++)
                {
                    if (FReset[i])
                    {
                        FBuffer[i] = new Spread <double>();
                        FDelta[i]  = 0;
                    }
                }
            }

            //
            for (int i = 0; i < spreadMax; i++)
            {
                if (FDoInsert[i])
                {
                    //insert new values to the buffer
                    FBuffer[i].Insert(0, FInput[i]);

                    //calculate the delta between the first an last slice
                    if (FBuffer[i].SliceCount > 0)
                    {
                        FDelta[i] = (FBuffer[i][0] - FBuffer[i][FBuffer[i].SliceCount - 1]);
                    }
                }
                else
                {
                    if (FBuffer.SliceCount > 0)
                    {
                        if (FBuffer[i].SliceCount > 0)
                        {
                            //add a new caluclate slice via delta to the spread
                            Spread <double>  MovedBuffer = new Spread <double>();
                            ISpread <double> MovedSpread = FBuffer[i].GetRange(0, FBuffer[i].SliceCount - 1);
                            double           NewSlice    = FBuffer[i][FBuffer[i].SliceCount - 1] + FDelta[i];
                            MovedBuffer.Add(NewSlice);
                            MovedBuffer.AddRange(MovedSpread);
                            FBuffer[i] = MovedBuffer;
                        }
                    }
                }

                //remove slices from the Buffer if the framecount gets smaller
                if (FFrameCount.IsChanged)
                {
                    if (FFrameCount[i] >= 0 && FBuffer[i].SliceCount > FFrameCount[i])
                    {
                        FBuffer[i].RemoveRange(FFrameCount[i], FBuffer[i].SliceCount - FFrameCount[i]);
                    }
                }
            }

            //set the output pins
            FDeltaOut.AssignFrom(FDelta as ISpread <double>);
            FOutput.AssignFrom(FBuffer);
        }