11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/flare/util/hash_function.rb', line 11
def get_key_hash_value key, type, word_size = 32
f = {
:simple => lambda {|k| r = 0; k.each_byte {|c| r += c }; r%word_size },
:bitshift => lambda {|k| r = 19790217; k.each_byte {|c| r = (r << 5) + (r << 2) + r + c }; r%word_size },
:crc32 => lambda {|k| Zlib.crc32(k, 0) },
}[type]
return nil if f.nil?
h = f.call(key)
key_hash_value = if word_size == 32
[h].pack("I").unpack("i")[0]
elsif word_size == 64
[h].pack("Q").unpack("q")[0]
else
h
end
key_hash_value = -key_hash_value if key_hash_value < 0
return key_hash_value
end
|