瀏覽代碼

HashCode optimization for enums with payloads

Brian Fiete 1 年之前
父節點
當前提交
f08ed7d976
共有 1 個文件被更改,包括 7 次插入2 次删除
  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++;
 					}