This is joaat_hash from string_table.F, generates the hash of a given string
Note
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