#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); } } } }
//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]); } } } } }
//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); } } } } }
#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]); } } } } }
#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); } } } }