Browse Source

Improve: optimize LuaValue.Equals

AnnulusGames 1 year ago
parent
commit
f0dc3d4cf0
1 changed files with 3 additions and 19 deletions
  1. 3 19
      src/Lua/LuaValue.cs

+ 3 - 19
src/Lua/LuaValue.cs

@@ -297,17 +297,7 @@ public readonly struct LuaValue : IEquatable<LuaValue>
 
     public override int GetHashCode()
     {
-        var valueHash = type switch
-        {
-            LuaValueType.Nil => 0,
-            LuaValueType.Boolean => Read<bool>().GetHashCode(),
-            LuaValueType.String => Read<string>().GetHashCode(),
-            LuaValueType.Number => Read<double>().GetHashCode(),
-            LuaValueType.Function or LuaValueType.Thread or LuaValueType.Table or LuaValueType.UserData => referenceValue!.GetHashCode(),
-            _ => 0,
-        };
-
-        return HashCode.Combine(type, valueHash);
+        return HashCode.Combine(type, value, referenceValue);
     }
 
     public bool Equals(LuaValue other)
@@ -317,14 +307,8 @@ public readonly struct LuaValue : IEquatable<LuaValue>
         return type switch
         {
             LuaValueType.Nil => true,
-            LuaValueType.Boolean => Read<bool>().Equals(other.Read<bool>()),
-            LuaValueType.String => Read<string>().Equals(other.Read<string>()),
-            LuaValueType.Number => Read<double>() == other.Read<double>(),
-            LuaValueType.Function => Read<LuaFunction>().Equals(other.Read<LuaFunction>()),
-            LuaValueType.Thread => Read<LuaThread>().Equals(other.Read<LuaThread>()),
-            LuaValueType.Table => Read<LuaTable>().Equals(other.Read<LuaTable>()),
-            LuaValueType.UserData => Read<LuaUserData>().Equals(other.Read<LuaUserData>()),
-            _ => false,
+            LuaValueType.Boolean or LuaValueType.Number => other.value == value,
+            _ => other.referenceValue!.Equals(referenceValue)
         };
     }