| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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
- }
|