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