Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.infinispan.commons.hash;
  
  
  
 import java.util.Set;

An implementation of Austin Appleby's MurmurHash2.0 algorithm, as documented on his website.

This implementation is based on the slower, endian-neutral version of the algorithm as documented on the site, ported from Austin Appleby's original C++ version MurmurHashNeutral2.cpp.

Other implementations are documented on Wikipedia's MurmurHash page.

Author(s):
Manik Surtani
Version:
4.1
See also:
MurmurHash website
MurmurHash entry on Wikipedia
MurmurHash2Compat
 
 public class MurmurHash2 implements Hash {
    private static final int M = 0x5bd1e995;
    private static final int R = 24;
    private static final int H = -1;
    private static final Charset UTF8 = Charset.forName("UTF-8");
 
    @Override
    public final int hash(byte[] payload) {
       int h = ;
       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 *= ;
          k ^= k >>> ;
          k *= ;
          h *= ;
          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 *= ;
       }
 
       h ^= h >>> 13;
       h *= ;
       h ^= h >>> 15;
 
       return h;
    }
 
    @Override
    public final int hash(int hashcode) {
       byte[] b = new byte[4];
       b[0] = (bytehashcode;
       b[1] = (byte) (hashcode >>> 8);
       b[2] = (byte) (hashcode >>> 16);
       b[3] = (byte) (hashcode >>> 24);
       return hash(b);
    }
 
    @Override
    public final int hash(Object o) {
       if (o instanceof byte[])
          return hash((byte[]) o);
       else if (o instanceof String)
          return hash(((Stringo).getBytes());
       else
          return hash(o.hashCode());
    }
 
    @Override
    public boolean equals(Object other) {
       return other != null && other.getClass() == getClass();
    }
 
    @Override
   public String toString() {
      return "MurmurHash2";
   }
   public static class Externalizer extends NoStateExternalizer<MurmurHash2> {
      @Override
      @SuppressWarnings("unchecked")
      public Set<Class<? extends MurmurHash2>> getTypeClasses() {
         return Util.<Class<? extends MurmurHash2>>asSet(MurmurHash2.class);
      }
      @Override
      public MurmurHash2 readObject(ObjectInput input) {
         return new MurmurHash2();
      }
      @Override
      public Integer getId() {
         return .;
      }
   }
New to GrepCode? Check out our FAQ X