[infinispan-commits] Infinispan SVN: r1753 - in trunk/core/src/main/java/org/infinispan/util: hash and 1 other directory.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Fri May 7 05:24:20 EDT 2010
Author: manik.surtani at jboss.com
Date: 2010-05-07 05:24:19 -0400 (Fri, 07 May 2010)
New Revision: 1753
Added:
trunk/core/src/main/java/org/infinispan/util/hash/
trunk/core/src/main/java/org/infinispan/util/hash/MurmurHash2.java
Log:
Added MurmurHash2 impl
Added: trunk/core/src/main/java/org/infinispan/util/hash/MurmurHash2.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/util/hash/MurmurHash2.java (rev 0)
+++ trunk/core/src/main/java/org/infinispan/util/hash/MurmurHash2.java 2010-05-07 09:24:19 UTC (rev 1753)
@@ -0,0 +1,72 @@
+package org.infinispan.util.hash;
+
+import java.util.Random;
+
+/**
+ * TODO: Document this
+ *
+ * @author Manik Surtani
+ * @version 4.1
+ */
+public class MurmurHash2 {
+
+ public static final int hash(byte[] payload) {
+ int m = 0x5bd1e995;
+ int r = 24;
+ int h = new Random().nextInt() ^ 1024;
+
+ int len = payload.length;
+ int offset = 0;
+ while (len >= 4) {
+ int k = payload[offset];
+ k |= payload[offset + 1] << 8;
+ k |= payload[offset + 2] << 16;
+ k |= payload[offset + 3] << 24;
+
+ k *= m;
+ k ^= k >> r;
+ k *= m;
+ h *= m;
+ h ^= k;
+
+ len -= 4;
+ offset += 4;
+ }
+
+ switch (len) {
+ case 3:
+ h ^= payload[offset + 2] << 16;
+ case 2:
+ h ^= payload[offset + 1] << 8;
+ case 1:
+ h ^= payload[offset];
+ h *= m;
+ }
+
+ h ^= h >> 13;
+ h *= m;
+ h ^= h >> 15;
+
+ return h;
+ }
+
+ public static final int hash(int hashcode) {
+ byte[] b = new byte[4];
+ b[0] = (byte) hashcode;
+ b[1] = (byte) (hashcode >> 8);
+ b[2] = (byte) (hashcode >> 16);
+ b[3] = (byte) (hashcode >> 24);
+ return hash(b);
+ }
+
+ public static final int hash(Object o) {
+ if (o instanceof byte[])
+ return hash((byte[]) o);
+ else if (o instanceof String)
+ return hash(((String) o).getBytes());
+ else
+ return hash(o.hashCode());
+ }
+
+
+}
Property changes on: trunk/core/src/main/java/org/infinispan/util/hash/MurmurHash2.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the infinispan-commits
mailing list