Improve C# Object comparison by using native pointer compare #1061 #713 #795

This commit is contained in:
Wojtek Figat
2023-05-05 10:49:07 +02:00
parent f0176c3520
commit 5e31a678bd
3 changed files with 17 additions and 5 deletions

View File

@@ -212,9 +212,11 @@ namespace FlaxEngine
/// <param name="right"></param>
/// <returns></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator == (Object left, Object right)
public static bool operator ==(Object left, Object right)
{
return Object.Equals(left, right);
IntPtr leftPtr = (object)left != null ? left.__unmanagedPtr : IntPtr.Zero;
IntPtr rightPtr = (object)right != null ? right.__unmanagedPtr : IntPtr.Zero;
return leftPtr == rightPtr;
}
/// <summary>
@@ -226,7 +228,17 @@ namespace FlaxEngine
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(Object left, Object right)
{
return !Object.Equals(left, right);
IntPtr leftPtr = (object)left != null ? left.__unmanagedPtr : IntPtr.Zero;
IntPtr rightPtr = (object)right != null ? right.__unmanagedPtr : IntPtr.Zero;
return leftPtr != rightPtr;
}
/// <inheritdoc />
public override bool Equals(object obj)
{
if (obj is FlaxEngine.Object o)
return o.__unmanagedPtr == __unmanagedPtr;
return false;
}
/// <summary>