Esempio n. 1
0
 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;
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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;
        }