Module: Flare::Util::HashFunction

Included in:
Tools::Cli::Verify
Defined in:
lib/flare/util/hash_function.rb

Instance Method Summary collapse

Instance Method Details

#get_key_hash_value(key, type, word_size = 32) ⇒ Object



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