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