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));
        }
Ejemplo n.º 2
0
        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);
        }