public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(XML, Validation)) { return; } RootElement.SliceCount = spreadMax; Document.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { try { var document = XMLNodes.AsDocument(XML[i], Validation[i]); Document[i] = document; RootElement[i] = document.Root; } catch (Exception e) { Document[i] = null; RootElement[i] = null; FLogger.Log(e); } } }
public override void OnEvaluateEnd() { base.OnEvaluateEnd(); if (FInput.IsChanged || SpreadUtils.AnyChanged(ReadIn, FilterReportIdIn)) { InputReportOut.SliceCount = FInput.SliceCount; for (int i = 0; i < FInput.SliceCount; i++) { if (FInput[i] == null || !ReadIn[i]) { InputReportOut[i].ResizeAndDispose(0, () => new MemoryStream()); continue; } var insprmax = FilterReportIdIn[i].SliceCount; InputReportOut[i].ResizeAndDispose(insprmax, () => new MemoryStream()); var device = FInput[i]; for (int j = 0; j < insprmax; j++) { if (InputReportOut[i][j] == null) { InputReportOut[i][j] = new MemoryStream(); } device.Read(InputReportOut[i][j], FilterReportIdIn[i][j]); } } } }
public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(Name, Value, Childs, Attributes)) { return; } spreadMax = Name .CombineWith(Value) .CombineWith(Childs) .CombineWith(Attributes); Element.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { var element = new XElement(Name[i], Value[i]); // clone attributes on the fly if they are already rooted somewhere var attributes = Attributes[i] .Where(a => a != null) .Select(a => a.Parent != null ? new XAttribute(a) : a) .ToArray(); element.Add(attributes); // clone elements on the fly if they are already rooted somewhere var children = Childs[i] .Where(c => c != null) .Select(c => c.Parent != null ? new XElement(c) : c) .ToArray(); element.Add(children); Element[i] = element; } }
protected override void UpdateOps(ref ScrollOperation ops, int i, int j) { ops.ElementSelector = FElement[i][j]; ops.ScrollPos = FScroll[i][j]; ops.Normalized = FNorm[i][j]; ops.Execute = SpreadUtils.AnyChanged(FScroll, FNorm, FElement); }
public void Evaluate(int SpreadMax) { if (_init) { DeviceList.Local.Changed += (sender, args) => _devChange = true; _init = false; } if (_devChange || SpreadUtils.AnyChanged(VendorIdIn, ProductIdIn)) { var sprmax = SpreadUtils.SpreadMax(VendorIdIn, ProductIdIn); DevicesOut.SliceCount = sprmax; for (int i = 0; i < sprmax; i++) { if (VendorIdIn[i] < 0 || ProductIdIn[i] < 0) { var devices = DeviceList.Local.GetHidDevices(); DevicesOut[i].AssignFrom(devices); } else { var devices = DeviceList.Local.GetHidDevices(VendorIdIn[i], ProductIdIn[i]); DevicesOut[i].AssignFrom(devices); } } _devChange = false; } ChangedOut[0] = _devChange; }
public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(XML, Validation)) { return; } RootElement.SliceCount = spreadMax; Document.SliceCount = spreadMax; Success.SliceCount = spreadMax; ErrorMessage.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { try { var document = XMLNodes.AsDocument(XML[i], Validation[i]); Document[i] = document; RootElement[i] = document.Root; Success[i] = true; ErrorMessage[i] = null; } catch (Exception e) { Document[i] = null; RootElement[i] = null; Success[i] = false; ErrorMessage[i] = e.Message; FLogger.Log(LogType.Warning, e.Message); } } }
public void Evaluate(int SpreadMax) { if (SpreadUtils.AnyChanged(this.sheetMips, this.sheetSizeX, this.sheetSizeY, this.glyphWidth, this.glyphHeight, this.aniso)) { this.FOutTextWrapper.SafeDisposeAll(); } if (this.FOutTextWrapper[0] == null) { this.FOutTextWrapper[0] = new DX11Resource <TextFontRenderer>(); } }
public void Evaluate(int SpreadMax) { if (!SpreadUtils.AnyChanged(FInput, FArgumentsIn)) { return; } FOutput.SliceCount = SpreadMax; for (int i = 0; i < SpreadMax; i++) { var arguments = FArgumentsIn.Select(a => a[i]); FOutput[i] = string.Format(FInput[i], arguments.ToArray()); } }
public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(Name, Value)) { return; } Attribute.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { Attribute[i] = new XAttribute(Name[i], Value[i]); } }
public void Evaluate(int SpreadMax) { if (SpreadUtils.AnyChanged(this.w, this.normal, this.FCustom)) { this.FShapes.SliceCount = SpreadMax; for (int i = 0; i < SpreadMax; i++) { PlaneShapeDefinition plane = new PlaneShapeDefinition(new BulletSharp.Vector3(this.normal[i].X, this.normal[i].Y, this.normal[i].Z), this.w[i]); plane.Pose = RigidBodyPose.Default; plane.CustomString = this.FCustom[i]; this.FShapes[i] = plane; } } }
public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(FNodeIn, FPrefixIn, FNamespaceIn)) { return; } if (FNodeIn.SliceCount > 0) { var namespaces = GetNamespaces(FPrefixIn, FNamespaceIn); var node = FNodeIn[0] ?? new XElement("dummy"); FNamespaceResolverOut[0] = node.CreateNamespaceResolver(namespaces); } else { FNamespaceResolverOut.SliceCount = 0; } }
public void Evaluate(int spreadMax) { if (!SpreadUtils.AnyChanged(Element, XPath, NamespaceResolver)) { return; } Elements.SliceCount = spreadMax; ErrorMessage.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { string error; Elements[i] = Element[i].GetElementsByXPath(XPath[i], NamespaceResolver[0], out error); ErrorMessage[i] = error; } }
public void Evaluate(int SpreadMax) { if (SpreadUtils.AnyChanged(this.suspensionStiffness, this.wheelsDampingCompression, this.wheelsDampingRelaxation, this.frictionSlip, this.rollInfluence)) { this.output.SliceCount = SpreadMax; for (int i = 0; i < SpreadMax; i++) { this.output[i] = new WheelInfoSettings() { FrictionSlip = this.frictionSlip[i], RollInfluence = this.rollInfluence[i], SuspensionStiffness = this.suspensionStiffness[i], WheelsDampingCompression = this.wheelsDampingCompression[i], WheelsDampingRelaxation = this.wheelsDampingRelaxation[i] }; } } }
public void Evaluate(int SpreadMax) { if ( _init || SpreadUtils.AnyChanged(IpIn, PortIn, RecBufSizeIn, RecTimeoutSecsIn, SendBufSizeIn, SendTimeoutSecsIn) || ReconnectIn[0] ) { CloseConnection(); OpenConnection(); _init = false; } if (CloseIn[0]) { CloseConnection(); } TcpOut[0] = _tcp; if (_tcpTask.IsCompleted || _tcpTask.IsFaulted) { CloseConnection(); ExceptionOut[0] = _tcpTask.Exception; //if (_tcpTask.Result != null || _tcpTask.IsFaulted) //{ // OpenConnection(); //} return; } if (!ConnectedOut[0]) { return; } if (SendIn[0]) { var l = (int)Math.Min(DataIn[0].Length, SendBufSizeIn[0]); DataIn[0].Position = 0; DataIn[0].Read(_sendBuffer, 0, l); _tcp.Client.BeginSend(_sendBuffer, 0, l, SocketFlags.None, ar => { }, null); } int length; byte[] buf; lock (_lock) { OnDataOut[0] = _onData; length = _recBufPos; //buf = _recbufSwitch ? _recBuf1 : _recBuf0; buf = _recBuf0; _recBuf0 = new byte[SendBufSizeIn[0]]; _recBufPos = 0; _onData = false; } DataOut.SliceCount = 1; if (DataOut[0] == null) { DataOut[0] = new MemoryStream(RecBufSizeIn[0]); } if (UseTokenizerIn[0]) { if (_delimitedBuf == null) { _delimitedBuf = new MemoryStream(RecBufSizeIn[0]); } if (OnDataOut[0]) { for (int i = 0; i < length; i++) { var tknr = TokenizerIn[0]; tknr.CheckByte(buf[i]); if (tknr.DataStart || tknr.Invalidate) { _delimitedBuf.Position = 0; _delimitedBuf.SetLength(0); } if (tknr.ByteValid) { _delimitedBuf.WriteByte(buf[i]); } if (tknr.DataComplete) { _delimitedBuf.Position = 0; DataOut[0].Position = 0; DataOut[0].SetLength(_delimitedBuf.Length); _delimitedBuf.CopyTo(DataOut[0]); } } AccumulatedBytesOut[0] = (int)_delimitedBuf.Length; } } else { if (OnDataOut[0]) { AccumulatedBytesOut[0] = length; DataOut[0].Position = 0; DataOut[0].SetLength(length); DataOut[0].Write(buf, 0, length); } else { DataOut[0].Position = 0; DataOut[0].SetLength(0); } } }
public void Evaluate(int SpreadMax) { FOut.Stream.IsChanged = false; if ( SpreadUtils.AnyChanged(FRectangle, FMaxBins, FDiscardBelow, FBox, FAllowRot) || _pgready && _typeChanged ) { FOut.Stream.IsChanged = true; int sprmax = Math.Max(FRectangle.SliceCount, FBox.SliceCount); if (FRectangle.SliceCount == 0 || FBox.SliceCount == 0) { sprmax = 0; } FOut.SliceCount = FDim.SliceCount = FSuccess.SliceCount = sprmax; if (sprmax == 0) { return; } for (int bi = 0; bi < sprmax; bi++) { var binlist = new List <RectBin>(); var rectlistin = new RectXywhFlipped[FRectangle[bi].SliceCount]; for (int i = 0; i < FRectangle[bi].SliceCount; i++) { object attachment = null; if (_pgready) { attachment = _attachment.GetSlice <ISpread>(bi, null)?[i]; } rectlistin[i] = new RectXywhFlipped { Attachment = attachment, FWidth = FRectangle[bi][i].x, FHeight = FRectangle[bi][i].y, ID = i, Left = 0, Top = 0, Flipped = false }; } FSuccess[bi] = RectPackHelper.Pack(rectlistin, FBox[bi].x, FBox[bi].y, FDiscardBelow[0], binlist, FMaxBins[0], FAllowRot[0]); FOut[bi].SliceCount = FDim[bi].SliceCount = binlist.Count; for (int i = 0; i < binlist.Count; i++) { FOut[bi][i] = binlist[i]; FDim[bi][i] = binlist[i].Size; } } } if (_typeChanged) { _typeChanged = false; } }
public void Evaluate(int SpreadMax) { if (!SpreadUtils.AnyChanged(OrderedInput, ReferenceIn)) { return; } foreach (var spread in new ISpread[] { FirstOut, WeightOfNextOut, DistanceOut }) { spread.SliceCount = SpreadUtils.SpreadMax(OrderedInput, ReferenceIn); } for (int i = 0; i < SpreadUtils.SpreadMax(OrderedInput, ReferenceIn); i++) { var outSpreads = new ISpread[] { FirstOut[i], WeightOfNextOut[i], DistanceOut[i] }; if (OrderedInput[i].SliceCount == 0) { foreach (var spread in outSpreads) { spread.SliceCount = 0; } continue; } foreach (var spread in outSpreads) { spread.SliceCount = 1; } if (OrderedInput[i].SliceCount == 1) { FirstOut[i][0] = 0; WeightOfNextOut[i][0] = 0; DistanceOut[i][0] = 0; continue; } var refvalue = ReferenceIn[i]; if (refvalue <= OrderedInput[i][0]) { SetResult(i, 0, refvalue, 0.0); continue; } if (refvalue >= OrderedInput[i][-1]) { SetResult(i, OrderedInput[i].SliceCount - 2, refvalue, 1.0); continue; } if (OrderedInput[i].SliceCount == 2) { SetResult(i, 0, refvalue); continue; } int minId = 0; int maxId = OrderedInput[i].SliceCount - 1; while (maxId - minId > 1) { int midId = (int)Math.Floor((float)(minId + maxId) * 0.5); if (refvalue.Eq(OrderedInput[i][midId])) { SetResult(i, midId, refvalue, 0.0); break; } if (refvalue > OrderedInput[i][midId]) { minId = midId; } else { maxId = midId; } } SetResult(i, minId, refvalue); } }
public void Evaluate(int SpreadMax) { bool changewochildren = (SpreadUtils.AnyChanged( NameIn, ManIdIn, IdIn, FadeInIn, FadeOutIn, FadeInDelIn, FadeOutDelIn, TransFollowTimeIn, BehaviorsIn, TransparentIn, ActiveIn, DispTrIn, TrUpdateModeIn, ClipParentHittingIn, SubContextIn, SetAttValsIn ) || AttachedChanged() || AuxDataChanged()) && AutoUpdateIn.TryGetSlice(0) || ForceUpdateIn.TryGetSlice(0); bool childrenchanged = AutoUpdateIn.TryGetSlice(0) && ChildrenIn.IsChanged || ForceUpdateIn.TryGetSlice(0); bool changed = childrenchanged || changewochildren || SetAttValsIn.TryGetSlice(0); int sprmax = SpreadUtils.SpreadMax( ChildrenIn, NameIn, BehaviorsIn, DispTrIn, ActiveIn, AttAuxKeysIn, AttTextsIn, AttValsIn, IdIn ); ElementProtOut.Stream.IsChanged = false; for (int i = 0; i < ElementProtOut.SliceCount; i++) { if (ElementProtOut[i] == null) { continue; } ElementProtOut[i].IsChanged--; } if (changed || init < 2) { if (ExternalIn.IsChanged) { ElementProtOut.SliceCount = 0; } ElementProtOut.ResizeAndDismiss(sprmax, i => FillElement(ProvidePrototype(i, null), i, true)); ElementIdOut.SliceCount = ElementProtOut.SliceCount; var gchildrenchanged = false; for (int i = 0; i < ElementProtOut.SliceCount; i++) { var isnew = false; if (ElementProtOut[i] == null) { ElementProtOut[i] = ProvidePrototype(i, ManIdIn[i] ? IdIn[i] : null); isnew = true; } bool lchildrenchanged = false; if (!changewochildren && childrenchanged) { if (ChildrenIn[i].SliceCount > 0) { for (int j = 0; j < ChildrenIn[i].SliceCount; j++) { if (ChildrenIn[i][j] == null) { continue; } if (ChildrenIn[i][j].IsChanged > 0) { lchildrenchanged = gchildrenchanged = true; } if (ElementProtOut[i].Children.ContainsKey(ChildrenIn[i][j].Id)) { continue; } ChildrenIn[i][j].IsChanged = ElementNodeUtils.ChangedFrames; lchildrenchanged = gchildrenchanged = true; } } else { lchildrenchanged = ElementProtOut[i].Children.Count > 0; gchildrenchanged = gchildrenchanged || lchildrenchanged; } } if (changewochildren || lchildrenchanged) { FillElement(ElementProtOut[i], i, isnew || init < 2); } if (!UseExternal(i, out var tprot)) { if (ManIdIn[i]) { ElementProtOut[i].Id = IdIn[i]; } } ElementIdOut[i] = ElementProtOut[i].Id; } //FElementProt.Flush(); if (changewochildren || gchildrenchanged) { ElementProtOut.Stream.IsChanged = true; } } init++; }
/// EVALUATE public void Evaluate(int SpreadMax) { // Clear the buffer before everey run CommandBuffer.Clear(); /// How many pins are there to handle if (ShouldReset || SpreadUtils.AnyChanged(FDigitalInputCount, FAnalogInputCount, FPinValues, FPinModeSetup)) { UpdatePinCount(); } /// Shall we reset? if (ShouldReset) { GetResetCommand(); } /// Write the values to the pins if (FPinModeSetup.IsChanged || FPinValues.IsChanged || ShouldReset) { SetPinStates(FPinValues); } // TODO: Find out if we have pull-up configured input pins and if so, update the config too if (FPinModeSetup.IsChanged || ShouldReset) { UpdatePinConfiguration(); } /// Firmware Version requested? if ((FReportFirmwareVersion.IsChanged && FReportFirmwareVersion[0]) || ShouldReset) { GetFirmwareVersionCommand(); } /// Set sample rate if (FSamplerate.IsChanged || ShouldReset) { GetSamplerateCommand(FSamplerate[0]); } /// Set Pinreporting for analog pins if (FPinModeSetup.IsChanged || FReportAnalogPins.IsChanged || ShouldReset) { SetAnalogPinReportingForRange(FAnalogInputCount[0], FReportAnalogPins[0]); } /// Set Pinreporting for digital pins if (FReportDigitalPins.IsChanged || ShouldReset) { for (int port = 0; port < NUM_PORTS; port++) { GetDigitalPinReportingCommandForState(FReportDigitalPins[0], port); } } if (I2CDataIn.IsChanged && I2CDataIn.SliceCount > 0) { // copy the incoming stream to the command buffer for (int data = I2CDataIn[0].ReadByte(); data != -1; data = I2CDataIn[0].ReadByte()) { CommandBuffer.Enqueue((byte)data); } } if ((FReportCapabilities.IsChanged && FReportCapabilities[0]) || ShouldReset) { GetCapabilityReport(); } bool HasData = CommandBuffer.Count > 0; FChangedOut[0] = HasData; // Spreaded Encoders are not supported at the moment! FFirmataOut.Length = 1; try{ if (HasData) { Stream outStream = new MemoryStream(CommandBuffer.ToArray()); using (var outputWriter = FFirmataOut.GetWriter()) { outputWriter.Write(outStream); } } } catch (Exception e) { // Do nothing on errors. Yes, i am lazy on that one. } // END Evaluate }