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