示例#1
0
文件: Store.cs 项目: vnmone/vvvv-sdk
 public virtual void Alter(int i, int incr, int binSize, ref Spread <Spread <T> > buffer)
 {
     if (FSet[i] && buffer.SliceCount > 0)
     {
         buffer[FId[i]] = (Spread <T>)FIn.GetRange(incr, binSize);
     }
     if (FRemove[i] && buffer.SliceCount > 0)
     {
         buffer.RemoveAt(FId[i]);
     }
     if (FInsert[i])
     {
         int id = VMath.Zmod(FId[i], buffer.SliceCount + 1);
         if (buffer.SliceCount > 0 || id < buffer.SliceCount)
         {
             buffer.Insert(id, (Spread <T>)FIn.GetRange(incr, binSize));
         }
         else
         {
             buffer.Add((Spread <T>)FIn.GetRange(incr, binSize));
         }
     }
 }
示例#2
0
文件: Store.cs 项目: vnmone/vvvv-sdk
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FClear[0])
            {
                FOut.SliceCount = 0;
            }

            if (FFlush[0])
            {
                FOut.AssignFrom(FIn);
            }

            if (PinChanged())
            {
                Spread <Spread <T> > buffer = new Spread <Spread <T> >(0);

                int incr = 0, sum = 0;
                while (!(sum >= FOut.SliceCount && (incr % FBinSize.SliceCount) == 0))
                {
                    buffer.Add((Spread <T>)FOut.GetRange(sum, FBinSize[incr]));
                    sum += FBinSize[incr];
                    incr++;
                }

                incr = 0;
                for (int i = 0; i < FId.SliceCount; i++)
                {
                    int binSize = 1;
                    try
                    {
                        binSize = buffer[FId[i]].SliceCount;
                    }
                    catch
                    {
                        binSize = FBinSize[FId[i]];
                    }
                    Alter(i, incr, binSize, ref buffer);
                    incr += binSize;
                }

                FOut.SliceCount = 0;
                foreach (Spread <T> t in buffer)
                {
                    FOut.AddRange(t);
                }
            }
        }