public PossibleValueSet NotEqual(PossibleValueSet pvs) { return ComparisonOperation(pvs); }
public PossibleValueSet GreaterThan(PossibleValueSet pvs) { return ComparisonOperation(pvs); }
public PossibleValueSet And(PossibleValueSet pvs, System.Type resultType) { return MathOperation(pvs, resultType); }
public PossibleValueSet RightShift(PossibleValueSet pvs, System.Type resultType) { return(MathOperation(pvs, resultType)); }
public PossibleValueSet IsNotNull() { PossibleValueSet result = new PossibleValueSet(typeof(bool)); if (ContainsNull) result.DistinctValues.Add(false); if (ContainsAllNonNullValues || DistinctValues.Any()) result.DistinctValues.Add(true); return result; }
public static PossibleValueSet CreateAllNonNullValues(System.Type expressionType) { PossibleValueSet result = new PossibleValueSet(expressionType); if (expressionType == typeof(bool)) { result.DistinctValues.Add(true); result.DistinctValues.Add(false); } else { result.ContainsAllNonNullValues = true; } return result; }
public PossibleValueSet Subtract(PossibleValueSet pvs, System.Type resultType) { return(MathOperation(pvs, resultType)); }
public PossibleValueSet Coalesce(PossibleValueSet pvs) { if (!ContainsNull) return this; PossibleValueSet result = new PossibleValueSet(ExpressionType); result.DistinctValues.AddRange(DistinctValues); result.ContainsAllNonNullValues = ContainsAllNonNullValues; result.ContainsNull = pvs.ContainsNull; result.ContainsAllNonNullValues |= pvs.ContainsAllNonNullValues; result.DistinctValues.AddRange(pvs.DistinctValues.Except(result.DistinctValues)); return result; }
private PossibleValueSet ComparisonOperation(PossibleValueSet pvs) { return(MathOperation(pvs, typeof(bool))); }
public PossibleValueSet Multiply(PossibleValueSet pvs, System.Type resultType) { return(MathOperation(pvs, resultType)); }
public PossibleValueSet LessThanOrEqual(PossibleValueSet pvs) { return(ComparisonOperation(pvs)); }
public PossibleValueSet GreaterThan(PossibleValueSet pvs) { return(ComparisonOperation(pvs)); }
public PossibleValueSet NotEqual(PossibleValueSet pvs) { return(ComparisonOperation(pvs)); }
public PossibleValueSet LessThanOrEqual(PossibleValueSet pvs) { return ComparisonOperation(pvs); }
public ExpressionValues(PossibleValueSet valuesIfUnknownMemberExpression) { Values = valuesIfUnknownMemberExpression; MemberExpressionValuesIfEmptyOuterJoined = new Dictionary <string, PossibleValueSet>(); }
private PossibleValueSet ComparisonOperation(PossibleValueSet pvs) { return MathOperation(pvs, typeof (bool)); }
public ExpressionValues(PossibleValueSet valuesIfUnknownMemberExpression) { Values = valuesIfUnknownMemberExpression; MemberExpressionValuesIfEmptyOuterJoined = new Dictionary<string, PossibleValueSet>(); }
// Unary Operators public PossibleValueSet Not() { DetermineBoolType(); var result = new PossibleValueSet(ExpressionType); result.ContainsNull = ContainsNull; result.DistinctValues.AddRange(DistinctValues.Cast<bool>().Select(v => !v).Cast<object>()); return result; }
private PossibleValueSet MathOperation(PossibleValueSet pvs, System.Type resultType) { // If either side is only null, the result will be null. if (!ContainsAnyNonNullValues || !pvs.ContainsAnyNonNullValues) return CreateNull(resultType); // If neither side is null, the result cannot be null. if (!ContainsNull && !pvs.ContainsNull) return CreateAllNonNullValues(resultType); // Otherwise, the result can be anything. return CreateAllValues(resultType); }
/// <summary> /// Verify that ExpressionType of both this and the other set is bool or nullable bool, /// and return the negotiated type (nullable bool if either side is nullable). /// </summary> private System.Type DetermineBoolType(PossibleValueSet otherSet) { DetermineBoolType(); otherSet.DetermineBoolType(); var nullableBoolType = typeof(bool?); if (ExpressionType == nullableBoolType || otherSet.ExpressionType == nullableBoolType) return nullableBoolType; return typeof(bool); }
public PossibleValueSet AndAlso(PossibleValueSet pvs) { /* * T && T == T * T && F == F * T && N == N * F && T == F * F && F == F * F && N == F * N && T == N * N && F == F * N && N == N */ var result = new PossibleValueSet(DetermineBoolType(pvs)); if (Contains(true) && pvs.Contains(true) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(true) && pvs.Contains(false) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(true) && pvs.Contains(null)) result.ContainsNull = true; if (Contains(false) && pvs.Contains(true) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(false) && pvs.Contains(false) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(false) && pvs.Contains(null) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(null) && pvs.Contains(true)) result.ContainsNull = true; if (Contains(null) && pvs.Contains(false) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(null) && pvs.Contains(null)) result.ContainsNull = true; return result; }
public static PossibleValueSet Create(System.Type expressionType, params object[] values) { PossibleValueSet result = new PossibleValueSet(expressionType); foreach (var v in values) { if (v == null) result.ContainsNull = true; else if (v.GetType() == expressionType && !result.DistinctValues.Contains(v)) result.DistinctValues.Add(v); else throw new AssertionFailure("Don't know how to add value to possible value set of type " + expressionType + ": " + v); } return result; }
public PossibleValueSet OrElse(PossibleValueSet pvs) { /* * T || T == T * T || F == T * T || N == T * F || T == T * F || F == F * F || N == N * N || T == T * N || F == N * N || N == N */ var result = new PossibleValueSet(DetermineBoolType(pvs)); if (Contains(true) && pvs.Contains(true) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(true) && pvs.Contains(false) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(true) && pvs.Contains(null) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(false) && pvs.Contains(true) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(false) && pvs.Contains(false) && !result.Contains(false)) result.DistinctValues.Add(false); if (Contains(false) && pvs.Contains(null)) result.ContainsNull = true; if (Contains(null) && pvs.Contains(true) && !result.Contains(true)) result.DistinctValues.Add(true); if (Contains(null) && pvs.Contains(false)) result.ContainsNull = true; if (Contains(null) && pvs.Contains(null)) result.ContainsNull = true; return result; }
public PossibleValueSet ExclusiveOr(PossibleValueSet pvs, System.Type resultType) { return MathOperation(pvs, resultType); }
public PossibleValueSet ExclusiveOr(PossibleValueSet pvs, System.Type resultType) { return(MathOperation(pvs, resultType)); }