/// <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(); } }
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}}"); }
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); } }
public override bool CanBeEmpty() { return(Expressions.Any(e => e.CanBeEmpty())); }
public bool IsExpressionUnique(ExpressionEntity expressionToCheck) { expressionToCheck.NotNull("expressionToCheck"); return(Expressions.Any(e => e.Expression == expressionToCheck.Expression)); }
/// <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))); }