public static long murmur(final BitVector bv,final long prefixLength,final long[] state,final long lcp){
  final int startStateWord=(int)(Math.min(lcp,prefixLength) / Long.SIZE);
  long h=state[startStateWord], k;
  long from=startStateWord * Long.SIZE;
  while (prefixLength - from >= Long.SIZE) {
    k=bv.getLong(from,from+=Long.SIZE);
    k*=M;
    k^=k >>> R;
    k*=M;
    h^=k;
    h*=M;
  }
  if (prefixLength > from) {
    k=bv.getLong(from,prefixLength);
    k*=M;
    k^=k >>> R;
    k*=M;
    h^=k;
    h*=M;
  }
  k=prefixLength;
  k*=M;
  k^=k >>> R;
  k*=M;
  h^=k;
  h*=M;
  return h;
}

public static long murmur ( final BitVector bv , final long prefixLength , final long [ ] state , final long lcp ) { final int startStateWord = ( int ) ( Math . min ( lcp , prefixLength ) / Long . SIZE ) ; long h = state [ startStateWord ] , k ; long from = startStateWord * Long . SIZE ; while ( prefixLength - from >= Long . SIZE ) { k = bv . getLong ( from , from += Long . SIZE ) ; k *= M ; k ^= k > > > R ; k *= M ; h ^= k ; h *= M ; } if ( prefixLength > from ) { k = bv . getLong ( from , prefixLength ) ; k *= M ; k ^= k > > > R ; k *= M ; h ^= k ; h *= M ; } k = prefixLength ; k *= M ; k ^= k > > > R ; k *= M ; h ^= k ; h *= M ; return h ; }
constant - time murmurhash 64 - bit hashing reusing precomputed state partially .
