Skip to content

Commit a2602c8

Browse files
committed
HashBuilder is a class for constructing a hash of a bunch of different elements
1 parent 4c16ed1 commit a2602c8

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

core/HashUtil.cs

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
using System;
2+
3+
4+
namespace g3
5+
{
6+
/// <summary>
7+
/// Construct hash of multiple values using FNV hash (ish)
8+
/// http://www.isthe.com/chongo/tech/comp/fnv/
9+
///
10+
/// (should probably be using uint? but standard GetHashCode() returns int...)
11+
/// </summary>
12+
public struct HashBuilder
13+
{
14+
public int Hash;
15+
16+
public HashBuilder(int init = unchecked((int)2166136261) )
17+
{
18+
Hash = init;
19+
}
20+
21+
22+
public void Add(int i) {
23+
unchecked {
24+
Hash = (Hash * 16777619) ^ i.GetHashCode();
25+
}
26+
}
27+
28+
public void Add(double d) {
29+
unchecked {
30+
Hash = (Hash * 16777619) ^ d.GetHashCode();
31+
}
32+
}
33+
34+
public void Add(float f) {
35+
unchecked {
36+
Hash = (Hash * 16777619) ^ f.GetHashCode();
37+
}
38+
}
39+
40+
41+
public void Add(Vector2f v) {
42+
unchecked {
43+
Hash = (Hash * 16777619) ^ v.x.GetHashCode();
44+
Hash = (Hash * 16777619) ^ v.y.GetHashCode();
45+
}
46+
}
47+
48+
public void Add(Vector2d v)
49+
{
50+
unchecked {
51+
Hash = (Hash * 16777619) ^ v.x.GetHashCode();
52+
Hash = (Hash * 16777619) ^ v.y.GetHashCode();
53+
}
54+
}
55+
56+
public void Add(Vector3f v) {
57+
unchecked {
58+
Hash = (Hash * 16777619) ^ v.x.GetHashCode();
59+
Hash = (Hash * 16777619) ^ v.y.GetHashCode();
60+
Hash = (Hash * 16777619) ^ v.z.GetHashCode();
61+
}
62+
}
63+
64+
public void Add(Vector3d v)
65+
{
66+
unchecked {
67+
Hash = (Hash * 16777619) ^ v.x.GetHashCode();
68+
Hash = (Hash * 16777619) ^ v.y.GetHashCode();
69+
Hash = (Hash * 16777619) ^ v.z.GetHashCode();
70+
}
71+
}
72+
73+
public void Add(Frame3f f)
74+
{
75+
unchecked {
76+
Hash = (Hash * 16777619) ^ f.Origin.x.GetHashCode();
77+
Hash = (Hash * 16777619) ^ f.Origin.y.GetHashCode();
78+
Hash = (Hash * 16777619) ^ f.Origin.z.GetHashCode();
79+
Hash = (Hash * 16777619) ^ f.Rotation.x.GetHashCode();
80+
Hash = (Hash * 16777619) ^ f.Rotation.y.GetHashCode();
81+
Hash = (Hash * 16777619) ^ f.Rotation.z.GetHashCode();
82+
Hash = (Hash * 16777619) ^ f.Rotation.w.GetHashCode();
83+
}
84+
}
85+
86+
public void Add(Index3i v) {
87+
unchecked {
88+
Hash = (Hash * 16777619) ^ v.a.GetHashCode();
89+
Hash = (Hash * 16777619) ^ v.b.GetHashCode();
90+
Hash = (Hash * 16777619) ^ v.c.GetHashCode();
91+
}
92+
}
93+
94+
public void Add(Index2i v) {
95+
unchecked {
96+
Hash = (Hash * 16777619) ^ v.a.GetHashCode();
97+
Hash = (Hash * 16777619) ^ v.b.GetHashCode();
98+
}
99+
}
100+
101+
}
102+
103+
104+
}

0 commit comments

Comments
 (0)