blob: 77e564d9aff92941e68bea0e2477d862184411ad (
plain) (
tree)
|
|
# 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
}
]
|