From 79432be784e7d7b25275239ac81ffe94ebe53da9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 9 Jan 2021 00:33:34 +0000 Subject: [PATCH] Add the mini ginger* hashes to package hash --- core/hash/mini.odin | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 core/hash/mini.odin diff --git a/core/hash/mini.odin b/core/hash/mini.odin new file mode 100644 index 000000000..024e88abc --- /dev/null +++ b/core/hash/mini.odin @@ -0,0 +1,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; +}