public static MurmurHash ComputePrefixHash(string value, byte[] buffer = null) { var max = Encoding.UTF8.GetMaxByteCount(value.Length); if (buffer == null || buffer.Length < max) { buffer = new byte[max]; } int byteLength = Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, 0); var hasher = new Murmur3(); int remaining = byteLength; uint int0, int1, int2, int3; int start = 0; int length = Math.Min(4, remaining); var hash = hasher.ComputeHash(buffer, start, length); int0 = hash.GetInt(0); start += length; remaining -= length; length <<= 1; length = Math.Min(length, remaining); if (length > 0) { hash = hasher.ComputeHash(buffer, start, length); } int1 = hash.GetInt(1); remaining -= length; start += length; length <<= 1; length = Math.Min(length, remaining); if (length > 0) { hash = hasher.ComputeHash(buffer, start, length); } int2 = hash.GetInt(2); remaining -= length; start += length; if (remaining > 0) { hash = hasher.ComputeHash(buffer, start, remaining); } int3 = hash.GetInt(3); return(new MurmurHash(int0, int1, int2, int3)); }
public static MurmurHash ComputeFullHash(string value, byte[] buffer = null) { var max = Encoding.UTF8.GetMaxByteCount(value.Length); if (buffer == null || buffer.Length < max) { buffer = new byte[max]; } int byteLength = Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, 0); var hasher = new Murmur3(); return(hasher.ComputeHash(buffer)); }