Ejemplo n.º 1
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));
        }
Ejemplo n.º 2
0
        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));
        }