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 override string ToCode()
        {
            var arguments = string.Join(", ", Arguments);

            if (!Expressions.Any())
            {
                return($" {TokenValues.Constructor}{TokenValues.LeftParenthesis}{arguments}{TokenValues.RightParenthesis};");
            }
            var body = string.Join("\n", Expressions.Select(e => e.ToCode()));

            return($" {TokenValues.Constructor}{TokenValues.LeftParenthesis}{arguments}{TokenValues.RightParenthesis} {{\n{body}\n}}");
        }
Esempio n. 3
0
 public void MarkForEvaluation()
 {
     if (_parseErrors != null)
     {
         // don't evaluate if parse errors are present
         NeedsEvaluated = false;
     }
     else
     {
         // if there are no expressions, or only comments, we don't need to evaluate
         NeedsEvaluated = Expressions.Any(e => e.Type != ExpressionType.Comment);
     }
 }
Esempio n. 4
0
 public override bool CanBeEmpty()
 {
     return(Expressions.Any(e => e.CanBeEmpty()));
 }
Esempio n. 5
0
        public bool IsExpressionUnique(ExpressionEntity expressionToCheck)
        {
            expressionToCheck.NotNull("expressionToCheck");

            return(Expressions.Any(e => e.Expression == expressionToCheck.Expression));
        }
Esempio n. 6
0
 /// <summary>
 /// Returns true if the inclusive expression is true and the exclusive expression is false
 /// </summary>
 /// <param name="aDate"></param>
 /// <returns></returns>
 public override bool Includes(DateTime aDate)
 {
     return(Expressions.Any(e => e.Includes(aDate)));
 }