about summary refs log tree commit
path: root/lib/metropolis/multi_hash
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-12-10 19:49:12 -0800
committerEric Wong <normalperson@yhbt.net>2010-12-10 19:49:12 -0800
commit5d6dc5c742f827350490d8f33c4c89b203ae7460 (patch)
tree9fc79f0ead7a407f7a7c636a92ed372870e5565a /lib/metropolis/multi_hash
parent8791d27f34d618bc7979b56da7e068b79a79b229 (diff)
downloadmetropolis-5d6dc5c742f827350490d8f33c4c89b203ae7460.tar.gz
String#hash is not stable across processes :<
We need to implement our own hash functions for splitting
databases across multiple files.  This was totally fucking up
Rainbows!
Diffstat (limited to 'lib/metropolis/multi_hash')
-rw-r--r--lib/metropolis/multi_hash/digest.rb23
-rw-r--r--lib/metropolis/multi_hash/to_i.rb12
2 files changed, 35 insertions, 0 deletions
diff --git a/lib/metropolis/multi_hash/digest.rb b/lib/metropolis/multi_hash/digest.rb
new file mode 100644
index 0000000..974d7ac
--- /dev/null
+++ b/lib/metropolis/multi_hash/digest.rb
@@ -0,0 +1,23 @@
+# -*- encoding: binary -*-
+require 'digest'
+module Metropolis::MultiHash::Digest
+  def digest_sha1(key)
+    ::Digest::SHA1.digest(key)[0,4].unpack("N")[0]
+  end
+
+  def digest_md5(key)
+    ::Digest::MD5.digest(key)[0,4].unpack("N")[0]
+  end
+
+  def digest_sha256(key)
+    ::Digest::SHA256.digest(key)[0,4].unpack("N")[0]
+  end
+
+  def digest_sha384(key)
+    ::Digest::SHA384.digest(key)[0,4].unpack("N")[0]
+  end
+
+  def digest_sha512(key)
+    ::Digest::SHA512.digest(key)[0,4].unpack("N")[0]
+  end
+end
diff --git a/lib/metropolis/multi_hash/to_i.rb b/lib/metropolis/multi_hash/to_i.rb
new file mode 100644
index 0000000..69b2819
--- /dev/null
+++ b/lib/metropolis/multi_hash/to_i.rb
@@ -0,0 +1,12 @@
+# -*- encoding: binary -*-
+# simple "hashing" method which converts keys to integers,
+# this may be useful for databases that only store numeric keys
+module Metropolis::MultiHash::ToI
+  def to_i(key)
+    key.to_i
+  end
+
+  def to_i_16(key)
+    key.to_i(16)
+  end
+end