private static uint SignatureCore(byte[] data, uint seed, MurmurHash3Types types, MurmurHash3Preference preference, MurmurHash3Managed managed) { switch (types) { case MurmurHash3Types.FAST: { return(MurmurHash3Core.FastMode.Hash32(data.AsSpan(), seed)); } case MurmurHash3Types.L_32: { var l32 = MurmurHash3Core.CreateL32(seed, managed); var h32 = l32.ComputeHash(data); return(BitConverter.ToUInt32(h32, 0)); } case MurmurHash3Types.L_128: { var l128 = MurmurHash3Core.CreateL128(seed, managed, preference); var h128 = l128.ComputeHash(data); return(BitConverter.ToUInt32(h128, 0)); } default: throw new NotImplementedException("Unknown type for MurmurHash3 hash provider."); } }
/// <inheritdoc /> public MurmurHash3InputStream(Stream underlyingStream, uint seed = 0, MurmurHash3Managed managed = MurmurHash3Managed.TRUE, MurmurHash3Types types = MurmurHash3Types.L_128, MurmurHash3Preference preference = MurmurHash3Preference.AUTO) { _underlyingStream = underlyingStream; _algorithm = types switch { MurmurHash3Types.L_32 => (HashAlgorithm)MurmurHash3Core.CreateL32(seed, managed), MurmurHash3Types.L_128 => (HashAlgorithm)MurmurHash3Core.CreateL128(seed, managed, preference), _ => throw new InvalidOperationException("Invalid operation because only support L32 and L128") }; }