Ver código fonte

HashCode optimization for enums with payloads

Brian Fiete 1 ano atrás
pai
commit
f08ed7d976
1 arquivos alterados com 7 adições e 2 exclusões
  1. 7 2
      BeefLibs/corlib/src/HashCode.bf

+ 7 - 2
BeefLibs/corlib/src/HashCode.bf

@@ -53,9 +53,14 @@ static class HashCode
 						code.Append(":\n");
 
 						if (enumCaseCount > 0)
-							code.AppendF($"\t\thash = Mix(hash, {enumCaseCount});\n");
+							code.AppendF($"\t\thash = {enumCaseCount};\n");
 						for (int tupleMemberIdx < tupleMemberCount)
-							code.AppendF($"\t\thash = Mix(hash, val{tupleMemberIdx});\n");
+						{
+							if ((enumCaseCount == 0) && (tupleMemberIdx == 0))
+								code.AppendF($"\t\thash = SelfOuter.Get(val{tupleMemberIdx});\n");
+							else
+								code.AppendF($"\t\thash = Mix(hash, val{tupleMemberIdx});\n");
+						}
 
 						enumCaseCount++;
 					}