Implement number comparison operators
This commit is contained in:
@@ -60,6 +60,7 @@ namespace Upsilon.BaseTypes.Number
|
||||
return new ScriptNumberLong(-((ScriptNumberLong)n).Value);
|
||||
}
|
||||
|
||||
|
||||
#region Equality
|
||||
private bool Equals(ScriptNumber other)
|
||||
{
|
||||
@@ -82,6 +83,40 @@ namespace Upsilon.BaseTypes.Number
|
||||
|
||||
#endregion
|
||||
|
||||
public static ScriptBoolean operator < (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
if (!a.IsFloat && !b.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberLong) a).Value < ((ScriptNumberLong) b).Value);
|
||||
if (a.IsFloat && b.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberDouble) a).Value < ((ScriptNumberDouble) b).Value);
|
||||
if (a.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberDouble) a).Value < ((ScriptNumberLong) b).Value);
|
||||
return new ScriptBoolean(((ScriptNumberLong) a).Value < ((ScriptNumberDouble) b).Value);
|
||||
}
|
||||
|
||||
public static ScriptBoolean operator > (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
if (!a.IsFloat && !b.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberLong) a).Value > ((ScriptNumberLong) b).Value);
|
||||
if (a.IsFloat && b.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberDouble) a).Value > ((ScriptNumberDouble) b).Value);
|
||||
if (a.IsFloat)
|
||||
return new ScriptBoolean(((ScriptNumberDouble) a).Value > ((ScriptNumberLong) b).Value);
|
||||
return new ScriptBoolean(((ScriptNumberLong) a).Value > ((ScriptNumberDouble) b).Value);
|
||||
}
|
||||
|
||||
public static ScriptBoolean operator <= (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
return (a < b) || a.Equals(b);
|
||||
}
|
||||
|
||||
public static ScriptBoolean operator >= (ScriptNumber a, ScriptNumber b)
|
||||
{
|
||||
return !(a < b) || a.Equals(b);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static explicit operator double(ScriptNumber n)
|
||||
{
|
||||
if (n.IsFloat)
|
||||
|
||||
Reference in New Issue
Block a user