Esempio n. 1
0
        public override void Evaluate(int SpreadMax)
        {
            var update = CheckReset();

            // early sync only, when not interested in input changes
            if (!ManageAllChanges)
            {
                if (UpKeep(update))
                {
                    update = true;
                }
            }


            foreach (var message in FInput)
            {
                if (message != null && message.Topic != "")
                {
                    var m = MatchOrInsert(message);
                    if (m != null)
                    {
                        update = true;
                    }
                }
            }

            if (ManageAllChanges)
            {
                if (UpKeep(update))
                {
                    update = true;
                }
            }
            else
            {
                var change = Keep.Sync(); // not interested input changes, so sync right away
                if (change != null && change.Count() > 0)
                {
                    update = true;
                }

                if (update)
                {
                    FOutput.FlushResult(Keep);
                    FCountOut.FlushInt(Keep.Count);
                }
            }
        }
Esempio n. 2
0
        //called when data for any output pin is requested
        public override void Evaluate(int SpreadMax)
        {
            var update = CheckReset();

            // early sync only, when not interested in input changes
            if (!ManageAllChanges && UpKeep(update))
            {
                update = true;
            }

            if (!FInput.IsAnyInvalid() && FInput.IsChanged)
            {
                foreach (var message in FInput)
                {
                    var found = MatchOrInsert(message);
                    if (found != null)
                    {
                        update = true;
                    }
                }
            }


            if (RemoveOld())
            {
                update = true;
            }

            if (ManageAllChanges)
            {
                if (UpKeep(update))
                {
                    update = true;
                }
            }
            else
            {
                var change = Keep.Sync(); // not interested input changes, so sync right away
                if (change != null && change.Count() > 0)
                {
                    update = true;
                }

                if (update)
                {
                    FOutput.FlushResult(Keep);
                    FCountOut.FlushInt(Keep.Count);
                }
            }

            // add all additional id fields to the changed message
            if (update && !Keep.QuickMode)
            {
                SpreadMax = FChangeOut.SliceCount;

                for (int i = 0; i < SpreadMax; i++)
                {
                    var change = FChangeOut[i];
                    var orig   = Keep[FChangeIndexOut[i]];

                    var idFields = from fieldName in FUseAsID
                                   select fieldName.Name;

                    foreach (var field in idFields)
                    {
                        if (field != TOPIC)
                        {
                            change.AssignFrom(field, orig[field]);
                        }
                    }
                }
            }
        }