diff options
-rw-r--r-- | 077hash.mu | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/077hash.mu b/077hash.mu new file mode 100644 index 00000000..77e564d9 --- /dev/null +++ b/077hash.mu @@ -0,0 +1,28 @@ +# From http://burtleburtle.net/bob/hash/hashfaq.html#example +# Though this one doesn't behave the same because mu uses doubles under the +# hood, which wrap around at a different limit. +recipe hash x:address:shared:array:character -> n:number [ + local-scope + load-ingredients + n <- copy 0 + len:number <- length *x + i:number <- copy 0 + { + done?:boolean <- greater-or-equal i, len + break-if done? + c:character <- index *x, i + n <- add n, c + tmp1:number <- shift-left n, 10 + n <- add n, tmp1 + tmp2:number <- shift-right n, 6 + n <- xor-bits n, tmp2 + tmp3:number <- shift-left n, 3 + n <- add n, tmp3 + tmp4:number <- shift-right n, 11 + n <- xor-bits n, tmp4 + tmp5:number <- shift-left n, 15 + n <- add n, tmp5 + i <- add i, 1 + loop + } +] |