blob: 98b1b4ba3a4e67799384b6cf28470c7db1cb1ffd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
package hash
ginger_hash8 :: proc(x: u8) -> u8 {
h := x * 251
h += ~(x << 3)
h ~= (x >> 1)
h += ~(x << 7)
h ~= (x >> 6)
h += (x << 2)
return h
}
ginger_hash16 :: proc(x: u16) -> u16 {
z := (x << 8) | (x >> 8)
h := z
h += ~(z << 5)
h ~= (z >> 2)
h += ~(z << 13)
h ~= (z >> 10)
h += ~(z << 4)
h = (h << 10) | (h >> 10)
return h
}
ginger8 :: proc(data: []byte) -> u8 {
h := ginger_hash8(0)
for b in data {
h ~= ginger_hash8(b)
}
return h
}
ginger16 :: proc(data: []byte) -> u16 {
h := ginger_hash16(0)
for b in data {
h ~= ginger_hash16(u16(b))
}
return h
}
|