public bool Compare(EvaluationParameters parameters, DecodeExpressionType comparisonType, INode left, INode right) { var evalLeft = left.TryEvaluate(parameters); var evalRight = right.TryEvaluate(parameters); switch (comparisonType) { case DecodeExpressionType.GreaterThanOrEqualTo: { var iLeft = ToInteger(evalLeft); var iRight = ToInteger(evalRight); return(iLeft >= iRight); } case DecodeExpressionType.LessThanOrEqualTo: { var iLeft = ToInteger(evalLeft); var iRight = ToInteger(evalRight); return(iLeft <= iRight); } case DecodeExpressionType.Equal: return(ExpressionsEqual(evalLeft, evalRight)); case DecodeExpressionType.NotEqual: return(!ExpressionsEqual(evalLeft, evalRight)); default: throw new NotSupportedException(); } }
public Parameter(DecodeExpressionType parameterType, INode parameterIndex) { if (parameterIndex == null) throw new ArgumentNullException("parameterIndex"); _ParameterType = parameterType; _ParameterIndex = parameterIndex; }
public Parameter(DecodeExpressionType parameterType, INode parameterIndex) { if (parameterIndex == null) { throw new ArgumentNullException("parameterIndex"); } _ParameterType = parameterType; _ParameterIndex = parameterIndex; }
public object this[DecodeExpressionType type, int index] { get { Parameters.ParameterBase pb; if (!_Parameters.TryGetValue(type, out pb)) { return(FallbackValue); } return(pb[index]); } set { Parameters.ParameterBase pb; if (!_Parameters.TryGetValue(type, out pb)) { throw new NotSupportedException(); } pb[index] = value; } }
protected INode DecodeExpression(BinaryReader input, DecodeExpressionType exprType) { var t = (byte)exprType; if (t < 0xD0) { return(new Nodes.StaticInteger(t - 1)); } if (t < 0xE0) { return(new Nodes.TopLevelParameter(t - 1)); } switch (exprType) { case DecodeExpressionType.Decode: { var len = GetInteger(input); return(Decode(input, len)); } case DecodeExpressionType.Byte: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Byte))); case DecodeExpressionType.Int16_MinusOne: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int16) - 1)); case DecodeExpressionType.Int16_1: case DecodeExpressionType.Int16_2: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int16))); case DecodeExpressionType.Int24_MinusOne: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24) - 1)); case DecodeExpressionType.Int24: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24))); case DecodeExpressionType.Int24_Lsh8: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24) << 8)); case DecodeExpressionType.Int24_SafeZero: { var v16 = input.ReadByte(); var v8 = input.ReadByte(); var v0 = input.ReadByte(); int v = 0; if (v16 != byte.MaxValue) { v |= v16 << 16; } if (v8 != byte.MaxValue) { v |= v8 << 8; } if (v0 != byte.MaxValue) { v |= v0; } return(new Nodes.StaticInteger(v)); } case DecodeExpressionType.Int32: return(new Nodes.StaticInteger(GetInteger(input, IntegerType.Int32))); case DecodeExpressionType.GreaterThanOrEqualTo: case DecodeExpressionType.GreaterThan: case DecodeExpressionType.LessThanOrEqualTo: case DecodeExpressionType.LessThan: case DecodeExpressionType.NotEqual: case DecodeExpressionType.Equal: { var left = DecodeExpression(input); var right = DecodeExpression(input); return(new Nodes.Comparison(exprType, left, right)); } case DecodeExpressionType.IntegerParameter: case DecodeExpressionType.PlayerParameter: case DecodeExpressionType.StringParameter: case DecodeExpressionType.ObjectParameter: return(new Nodes.Parameter(exprType, DecodeExpression(input))); default: throw new NotSupportedException(); } }
public Comparison(DecodeExpressionType comparisonType, INode left, INode right) { _ComparisonType = comparisonType; _Left = left; _Right = right; }
protected INode DecodeExpression(BinaryReader input, DecodeExpressionType exprType) { var t = (byte)exprType; if (t < 0xD0) return new Nodes.StaticInteger(t - 1); if (t < 0xE0) return new Nodes.TopLevelParameter(t - 1); switch (exprType) { case DecodeExpressionType.Decode: { var len = GetInteger(input); return Decode(input, len); } case DecodeExpressionType.Byte: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Byte)); case DecodeExpressionType.Int16_MinusOne: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int16) - 1); case DecodeExpressionType.Int16_1: case DecodeExpressionType.Int16_2: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int16)); case DecodeExpressionType.Int24_MinusOne: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24) - 1); case DecodeExpressionType.Int24: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24)); case DecodeExpressionType.Int24_Lsh8: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int24) << 8); case DecodeExpressionType.Int24_SafeZero: { var v16 = input.ReadByte(); var v8 = input.ReadByte(); var v0 = input.ReadByte(); int v = 0; if (v16 != byte.MaxValue) v |= v16 << 16; if (v8 != byte.MaxValue) v |= v8 << 8; if (v0 != byte.MaxValue) v |= v0; return new Nodes.StaticInteger(v); } case DecodeExpressionType.Int32: return new Nodes.StaticInteger(GetInteger(input, IntegerType.Int32)); case DecodeExpressionType.GreaterThanOrEqualTo: case DecodeExpressionType.GreaterThan: case DecodeExpressionType.LessThanOrEqualTo: case DecodeExpressionType.LessThan: case DecodeExpressionType.NotEqual: case DecodeExpressionType.Equal: { var left = DecodeExpression(input); var right = DecodeExpression(input); return new Nodes.Comparison(exprType, left, right); } case DecodeExpressionType.IntegerParameter: case DecodeExpressionType.PlayerParameter: case DecodeExpressionType.StringParameter: case DecodeExpressionType.ObjectParameter: return new Nodes.Parameter(exprType, DecodeExpression(input)); default: throw new NotSupportedException(); } }
public object this[DecodeExpressionType type, int index] { get { Parameters.ParameterBase pb; if (!_Parameters.TryGetValue(type, out pb)) return FallbackValue; return pb[index]; } set { Parameters.ParameterBase pb; if (!_Parameters.TryGetValue(type, out pb)) throw new NotSupportedException(); pb[index] = value; } }
public bool Compare(EvaluationParameters parameters, DecodeExpressionType comparisonType, INode left, INode right) { var evalLeft = left.TryEvaluate(parameters); var evalRight = right.TryEvaluate(parameters); switch (comparisonType) { case DecodeExpressionType.GreaterThanOrEqualTo: { var iLeft = ToInteger(evalLeft); var iRight = ToInteger(evalRight); return iLeft >= iRight; } case DecodeExpressionType.LessThanOrEqualTo: { var iLeft = ToInteger(evalLeft); var iRight = ToInteger(evalRight); return iLeft <= iRight; } case DecodeExpressionType.Equal: return ExpressionsEqual(evalLeft, evalRight); case DecodeExpressionType.NotEqual: return !ExpressionsEqual(evalLeft, evalRight); default: throw new NotSupportedException(); } }