various fixes and optimisations:

• ensure unsigned arithmetics is used in the cdb hash
• make the hash functions print their result again
• now we can use the Lb64{en,de}code trick of using stdin if "$*"==""
• optimise the one-at-a-time code for shell
This commit is contained in:
tg 2009-08-27 16:40:08 +00:00
parent 4c1a99da7c
commit b5b5d905b0

View File

@ -1,4 +1,4 @@
# $MirOS: src/bin/mksh/dot.mkshrc,v 1.47 2009/08/27 16:29:21 tg Exp $ # $MirOS: src/bin/mksh/dot.mkshrc,v 1.48 2009/08/27 16:40:08 tg Exp $
#- #-
# Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009 # Copyright (c) 2002, 2003, 2004, 2006, 2007, 2008, 2009
# Thorsten Glaser <tg@mirbsd.org> # Thorsten Glaser <tg@mirbsd.org>
@ -280,10 +280,11 @@ function Lcdbhash_add {
typeset u=$- typeset u=$-
set +U set +U
typeset s="$*" typeset s="$*"
[[ -n $s ]] || { s=$(cat;print x); s=${s%x}; }
typeset -i i=0 n=${#s} typeset -i i=0 n=${#s}
while (( i < n )); do while (( i < n )); do
(( Lcdbhash_result = (Lcdbhash_result * 33) ^ 1#${s:(i++):1} )) ((# Lcdbhash_result = (Lcdbhash_result * 33) ^ 1#${s:(i++):1} ))
done done
[[ $u = *U* ]] && set -U [[ $u = *U* ]] && set -U
@ -292,6 +293,7 @@ function Lcdbhash_add {
function Lcdbhash { function Lcdbhash {
Lcdbhash_result=5381 Lcdbhash_result=5381
Lcdbhash_add "$@" Lcdbhash_add "$@"
print ${Lcdbhash_result#16#}
} }
# Jenkins one-at-a-time hash (not via stdio, for speed) # Jenkins one-at-a-time hash (not via stdio, for speed)
@ -300,11 +302,12 @@ function Loaathash_add {
typeset u=$- typeset u=$-
set +U set +U
typeset s="$*" typeset s="$*"
[[ -n $s ]] || { s=$(cat;print x); s=${s%x}; }
typeset -i i=0 n=${#s} typeset -i i=0 n=${#s}
while (( i < n )); do while (( i < n )); do
((# Loaathash_result += 1#${s:(i++):1} )) ((# Loaathash_result = (Loaathash_result + 1#${s:(i++):1}) *
((# Loaathash_result += Loaathash_result << 10 )) 1025 ))
((# Loaathash_result ^= Loaathash_result >> 6 )) ((# Loaathash_result ^= Loaathash_result >> 6 ))
done done
@ -315,8 +318,9 @@ function Loaathash {
Loaathash_result=0 # hmm... Loaathash_result=0 # hmm...
Loaathash_add "$@" Loaathash_add "$@"
((# Loaathash_result += Loaathash_result << 3 )) ((# Loaathash_result += Loaathash_result << 3 ))
((# Loaathash_result ^= Loaathash_result >> 11 )) ((# Loaathash_result = (Loaathash_result ^
((# Loaathash_result += Loaathash_result << 15 )) (Loaathash_result >> 11)) * 32769 ))
print ${Loaathash_result#16#}
} }
# strip comments (and leading/trailing whitespace if IFS is set) from # strip comments (and leading/trailing whitespace if IFS is set) from