Files
Odin/core/hash/mini.odin
2021-01-09 00:33:34 +00:00

41 lines
615 B
Odin

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