protected Rule() { conditions = new List <Condition>(); subRules = new List <Rule>(); ReturnSelf = true; this.Parent = null; Priority = Int32.MaxValue; Weight = 0; RuleEvaluationFlags = AI_Shell.RuleEvaluationFlags.Standard; }
public virtual Rule EvaluateRules(Dictionary <string, object> dataDictionary, RuleEvaluationFlags ruleFlags) { if (Conditions.Any(c => !c.EvaluateCondition(dataDictionary))) { return(null); } List <Rule> rulesMet = new List <Rule>(); rulesMet = EvaluateSubRules(dataDictionary); if (ReturnSelf) { rulesMet.Add(this); } if ((ruleFlags & RuleEvaluationFlags.UsePriority) == RuleEvaluationFlags.UsePriority) { HighestPriority(ref rulesMet); } if ((ruleFlags & RuleEvaluationFlags.UseWeight) == RuleEvaluationFlags.UseWeight) { HighestWeight(ref rulesMet); } if (rulesMet.Count > 0) { if ((ruleFlags & RuleEvaluationFlags.ReturnRandom) == RuleEvaluationFlags.ReturnRandom) { return(RandomRule(ref rulesMet)); } else { return(rulesMet[0]); } } else { return(null); } }
public virtual Rule EvaluateRules(Dictionary<string, object> dataDictionary, RuleEvaluationFlags ruleFlags) { if (Conditions.Any(c => !c.EvaluateCondition(dataDictionary))) return null; List<Rule> rulesMet = new List<Rule>(); rulesMet = EvaluateSubRules(dataDictionary); if (ReturnSelf) rulesMet.Add(this); if ((ruleFlags & RuleEvaluationFlags.UsePriority) == RuleEvaluationFlags.UsePriority) HighestPriority(ref rulesMet); if ((ruleFlags & RuleEvaluationFlags.UseWeight) == RuleEvaluationFlags.UseWeight) HighestWeight(ref rulesMet); if (rulesMet.Count > 0) if ((ruleFlags & RuleEvaluationFlags.ReturnRandom) == RuleEvaluationFlags.ReturnRandom) return RandomRule(ref rulesMet); else return rulesMet[0]; else return null; }