public override object Evaluate()

in src/main/csharp/Selector/ComparisonExpression.cs [32:78]


        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);
        }