public override object Evaluate(MessageEvaluationContext message) { object lvalue = Left.Evaluate(message); object rvalue = Right.Evaluate(message); int?compared = null; if (lvalue == null || rvalue == null) { if (lvalue == null && rvalue == null) { compared = 0; } } else { if (lvalue == rvalue) { compared = 0; } else if (lvalue is string && rvalue is string) { compared = ((string)lvalue).CompareTo(rvalue); } else { AlignedNumericValues values = new AlignedNumericValues(lvalue, rvalue); switch (values.TypeEnum) { case AlignedNumericValues.T.SByteType: compared = ((sbyte )values.Left).CompareTo((sbyte )values.Right); break; case AlignedNumericValues.T.ByteType: compared = ((byte )values.Left).CompareTo((byte )values.Right); break; case AlignedNumericValues.T.CharType: compared = ((char )values.Left).CompareTo((char )values.Right); break; case AlignedNumericValues.T.ShortType: compared = ((short )values.Left).CompareTo((short )values.Right); break; case AlignedNumericValues.T.UShortType: compared = ((ushort)values.Left).CompareTo((ushort)values.Right); break; case AlignedNumericValues.T.IntType: compared = ((int )values.Left).CompareTo((int )values.Right); break; case AlignedNumericValues.T.UIntType: compared = ((uint )values.Left).CompareTo((uint )values.Right); break; case AlignedNumericValues.T.LongType: compared = ((long )values.Left).CompareTo((long )values.Right); break; case AlignedNumericValues.T.ULongType: compared = ((ulong )values.Left).CompareTo((ulong )values.Right); break; case AlignedNumericValues.T.FloatType: compared = ((float )values.Left).CompareTo((float )values.Right); break; case AlignedNumericValues.T.DoubleType: compared = ((double)values.Left).CompareTo((double)values.Right); break; } } } return(AsBoolean(compared)); }
public override object Evaluate(MessageEvaluationContext message) { object lvalue = Left.Evaluate(message); if (lvalue == null) { return(null); } object rvalue = Right.Evaluate(message); if (lvalue is string) { return((string)lvalue + rvalue); } if (rvalue == null) { return(null); } AlignedNumericValues values = new AlignedNumericValues(lvalue, rvalue); object result = null; switch (values.TypeEnum) { case AlignedNumericValues.T.SByteType: result = (sbyte )values.Left + (sbyte )values.Right; break; case AlignedNumericValues.T.ByteType: result = (byte )values.Left + (byte )values.Right; break; case AlignedNumericValues.T.CharType: result = (char )values.Left + (char )values.Right; break; case AlignedNumericValues.T.ShortType: result = (short )values.Left + (short )values.Right; break; case AlignedNumericValues.T.UShortType: result = (ushort)values.Left + (ushort)values.Right; break; case AlignedNumericValues.T.IntType: result = (int )values.Left + (int )values.Right; break; case AlignedNumericValues.T.UIntType: result = (uint )values.Left + (uint )values.Right; break; case AlignedNumericValues.T.LongType: result = (long )values.Left + (long )values.Right; break; case AlignedNumericValues.T.ULongType: result = (ulong )values.Left + (ulong )values.Right; break; case AlignedNumericValues.T.FloatType: result = (float )values.Left + (float )values.Right; break; case AlignedNumericValues.T.DoubleType: result = (double)values.Left + (double)values.Right; break; } return(result); }