internal override ExValue Evaluate <TKey>(TagBatchInstance <TKey> instance) { ExValue left = LeftHand.Evaluate(instance); ExValue right = RightHand.Evaluate(instance); switch (Token.TokenType) { case TagTokenType.IsEqual: return(new ExValue(left.Equals(right))); case TagTokenType.IsNot: return(new ExValue(!left.Equals(right))); case TagTokenType.IsLte: return(new ExValue(left.CompareTo(right) <= 0)); case TagTokenType.IsLessThan: return(new ExValue(left.CompareTo(right) < 0)); case TagTokenType.IsGreaterThan: return(new ExValue(left.CompareTo(right) > 0)); case TagTokenType.IsGte: return(new ExValue(left.CompareTo(right) >= 0)); default: throw new InvalidOperationException(); } }
internal override ExValue Evaluate <TKey>(TagBatchInstance <TKey> instance) { ExValue leftValue = LeftHand.Evaluate(instance); bool leftResult = leftValue.ToBool(); if (IsAnd != leftResult) { // ((IsAnd && !leftResult) || (IsOr && leftResult)) return(leftValue); } return(RightHand.Evaluate(instance)); }
public NumberExpression(TagToken token) : base(token) { string tv = token.Value; if (tv.IndexOfAny(new char[] { '.', 'E', 'e' }) >= 0) { _value = new ExValue(double.Parse(tv)); } else if (tv.StartsWith("0x", StringComparison.Ordinal)) { _value = new ExValue(int.Parse(tv, System.Globalization.NumberStyles.AllowHexSpecifier)); } else { _value = new ExValue(int.Parse(tv, System.Globalization.NumberStyles.AllowLeadingSign)); } }