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