This is joaat_hash from string_table.F, generates the hash of a given string
http://en.wikipedia.org/wiki/Hash_table http://www.burtleburtle.net/bob/hash/doobs.html
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | key |
key a string of any length |
FUNCTION hash_str(key) RESULT(hash)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
!! This is joaat_hash from string_table.F, generates the hash of a given string
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
!! @note
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
!! http://en.wikipedia.org/wiki/Hash_table
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
!! http://www.burtleburtle.net/bob/hash/doobs.html
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
CHARACTER(LEN=*), INTENT(IN) :: key
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
!! key a string of any length
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
INTEGER(KIND=int_8) :: hash
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
INTEGER(KIND=int_8), PARAMETER :: b32 = 2_int_8**32-1_int_8
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
INTEGER :: i
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=0_int_8
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
DO i=1,LEN(key)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND(hash+ICHAR(key(i:i)) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND( hash+IAND(ISHFT(hash,10),b32) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND(IEOR(hash,IAND(ISHFT(hash,-6),b32)) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
ENDDO
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND( hash+IAND(ISHFT(hash, 3),b32) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND(IEOR(hash,IAND(ISHFT(hash,-11),b32)) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
hash=IAND( hash+IAND(ISHFT(hash, 15),b32) ,b32)
# 111 "/__w/dbcsr/dbcsr/src/core/dbcsr_dict.F"
END FUNCTION hash_str