public int ConsumeInitial(ref Murmur3 murmur, byte[] bb, int offset, int length) { if (murmur.stateOffset != 0) { return(ConsumeRemaining(ref murmur, bb, offset, length)); } return(0); }
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)); }
public int ConsumeRemaining(ref Murmur3 murmur, byte[] bb, int offset, int length) { fixed(byte *bytes = this.bytes) { int i = 0; for (i = 0; i < length && murmur.stateOffset < BYTE_LENGTH; i++, murmur.stateOffset++) { bytes[murmur.stateOffset] = bb[i + offset]; } if (murmur.stateOffset == READ_SIZE) { murmur.MixBody(K1, K2); murmur.stateOffset = 0; K1 = 0; K2 = 0; } return(i); } }