Пример #1
0
        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);
                }
            }
        }
Пример #2
0
        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]);
                    }
                }
            }
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
 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);
 }
Пример #5
0
        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;
        }
Пример #6
0
        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);
                }
            }
        }
Пример #7
0
        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>();
            }
        }
Пример #8
0
        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());
            }
        }
Пример #9
0
        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]);
            }
        }
Пример #10
0
        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;
                }
            }
        }
Пример #11
0
 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;
     }
 }
Пример #12
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]
             };
         }
     }
 }
Пример #14
0
        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);
                }
            }
        }
Пример #15
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;
            }
        }
Пример #16
0
        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);
            }
        }
Пример #17
0
        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++;
        }
Пример #18
0
        /// 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
        }