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")
     };
 }