Esempio n. 1
0
        /// <summary>
        ///     Evaluates the expression for the given shape.
        /// </summary>
        /// <param name="shapes"></param>
        /// <returns>The result of evaluating the expression.</returns>
        public override bool Evaluate(ShapeSet shapes)
        {
            if (shapes == null)
            {
                throw new ArgumentNullException(nameof(shapes));
            }
            switch (ExpressionType)
            {
            case ExpressionType.And:
                return(Expressions.All(e => e.Evaluate(shapes)));

            case ExpressionType.Or:
                return(Expressions.Any(e => e.Evaluate(shapes)));

            case ExpressionType.BoolEqual:
                return(Expressions.AreEqual());

            case ExpressionType.Xor:
                Debug.Assert(Expressions.Count == 2);
                return(Expressions[0].Evaluate(shapes) ^ Expressions[1].Evaluate(shapes));

            case ExpressionType.Not:
                Debug.Assert(Expressions.Count == 1);
                return(!Expressions[0].Evaluate(shapes));

            default:
                Debug.Assert(false);
                throw new ArgumentOutOfRangeException();
            }
        }
Esempio n. 2
0
 public bool IsInconsistentWith(DecisionRule rule)
 {
     //do two rules have same background rule but different outputs?
     return(Expressions.AreEqual(rule.Expressions) && Output != rule.Output);
 }