예제 #1
0
                #pragma warning restore
        #endregion fields & pins

        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            FInput.Sync();
            FBin.Sync();

            if (FInput.IsChanged || FBin.IsChanged || FTogPhase.IsChanged || FPhase.IsChanged)
            {
                spread.Sync(FInput, 1, FBin, FPhase.CombineWith(FTogPhase));

                FOutBin.Length = spread.Count;
                FOutput.Length = spread.ItemCount;
                using (var binWriter = FOutBin.GetWriter())
                    using (var dataWriter = FOutput.GetWriter())
                    {
                        for (int b = 0; b < spread.Count; b++)
                        {
                            int phase = 0;
                            if (FTogPhase[b])
                            {
                                phase = (int)FPhase[b];
                            }
                            else
                            {
                                phase = (int)Math.Round(FPhase[b] * spread[b].Length);
                            }

                            T[] src = spread[b];
                            phase = VMath.Zmod(phase, src.Length);

                            if (phase != 0)
                            {
                                T[] dst = new T[src.Length];
                                Array.Copy(src, 0, dst, phase, src.Length - phase);
                                Array.Copy(src, src.Length - phase, dst, 0, phase);
                                dataWriter.Write(dst, 0, dst.Length);
                            }
                            else
                            {
                                dataWriter.Write(src, 0, src.Length);
                            }

                            binWriter.Write(spread[b].Length);
                        }
                    }
            }
        }
예제 #2
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            Prepare();
            var input     = FInputContainer.IOObject;
            var remainder = FRemainderContainer.IOObject;
            var last      = FLastContainer.IOObject;

            input.Sync();
            FBin.Sync();

            if (input.IsChanged || FBin.IsChanged)
            {
                spread.Sync(input, 1, FBin);

                last.Length = spread.Count;
                if (last.Length == spread.ItemCount || spread.ItemCount == 0)
                {
                    remainder.Length = 0;
                    if (spread.ItemCount != 0)
                    {
                        last.AssignFrom(input);
                    }
                    else
                    {
                        last.Length = 0;
                    }
                }
                else
                {
                    remainder.Length = spread.ItemCount - last.Length;
                    using (var rWriter = remainder.GetWriter())
                        using (var lWriter = last.GetWriter())
                        {
                            for (int b = 0; b < spread.Count; b++)
                            {
                                int rLength = spread[b].Length - 1;
                                rWriter.Write(spread[b], 0, rLength);

                                lWriter.Write(spread[b][rLength]);
                            }
                        }
                }
            }
        }
예제 #3
0
        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            Prepare();

            var input     = FInputContainer.IOObject;
            var first     = FFirstContainer.IOObject;
            var remainder = FRemainderContainer.IOObject;

            input.Sync();
            FBin.Sync();

            if (input.IsChanged || FBin.IsChanged)
            {
                spread.Sync(input, 1, FBin);

                first.Length = spread.Count;
                if (first.Length == spread.ItemCount || spread.ItemCount == 0)
                {
                    remainder.Length = 0;
                    if (spread.ItemCount != 0)
                    {
                        first.AssignFrom(input);
                    }
                    else
                    {
                        first.Length = 0;
                    };
                }
                else
                {
                    remainder.Length = spread.ItemCount - first.Length;
                    using (var fWriter = first.GetWriter())
                        using (var rWriter = remainder.GetWriter())
                        {
                            for (int b = 0; b < spread.Count; b++)
                            {
                                fWriter.Write(spread[b][0]);
                                rWriter.Write(spread[b], 1, spread[b].Length - 1);
                            }
                        }
                }
            }
        }
예제 #4
0
파일: CDRBin.cs 프로젝트: neuston/vvvv-sdk
                #pragma warning restore
        #endregion fields & pins

        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            FInput.Sync();
            FBin.Sync();

            if (FInput.IsChanged || FBin.IsChanged)
            {
                spread.Sync(FInput, 1, FBin);

                FLast.Length = spread.Count;
                if (FLast.Length == spread.ItemCount || spread.ItemCount == 0)
                {
                    FRemainder.Length = 0;
                    if (spread.ItemCount != 0)
                    {
                        FLast.AssignFrom(FInput);
                    }
                    else
                    {
                        FLast.Length = 0;
                    }
                }
                else
                {
                    FRemainder.Length = spread.ItemCount - FLast.Length;
                    using (var rWriter = FRemainder.GetWriter())
                        using (var lWriter = FLast.GetWriter())
                        {
                            for (int b = 0; b < spread.Count; b++)
                            {
                                int rLength = spread[b].Length - 1;
                                rWriter.Write(spread[b], 0, rLength);

                                lWriter.Write(spread[b][rLength]);
                            }
                        }
                }
            }
        }
예제 #5
0
                #pragma warning restore
        #endregion fields & pins

        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            FInput.Sync();
            FBin.Sync();

            if (FInput.IsChanged || FBin.IsChanged || FReverse.IsChanged)
            {
                spread.Sync(FInput, 1, FBin, FReverse.SliceCount);

                FOutput.Length = spread.ItemCount;
                using (var dataWriter = FOutput.GetWriter())
                {
                    for (int b = 0; b < spread.Count; b++)
                    {
                        T[] bin = spread[b];
                        if (FReverse[b])
                        {
                            Array.Reverse(bin);
                        }
                        dataWriter.Write(bin, 0, bin.Length);
                    }
                }
            }
        }