Esempio n. 1
0
        // Token: 0x06000009 RID: 9 RVA: 0x000021CC File Offset: 0x000003CC
        public static long ComputeNormalizedLength(Stream input, byte[] buffer = null)
        {
            long length = 0L;

            if (buffer == null)
            {
                buffer = new byte[65536];
            }
            for (;;)
            {
                int bytesRead = input.Read(buffer, 0, buffer.Length);
                if (bytesRead == 0)
                {
                    break;
                }
                for (int i = 0; i < bytesRead; i++)
                {
                    if (!MurmurHash2.IsWhitespaceCharacter(buffer[i]))
                    {
                        length += 1L;
                    }
                }
            }
            return(length);
        }
Esempio n. 2
0
        // Token: 0x06000005 RID: 5 RVA: 0x000020C0 File Offset: 0x000002C0
        public static ulong ComputeHash(Stream input)
        {
            byte[] buffer   = new byte[65536];
            long   position = input.Position;
            long   length   = MurmurHash2.ComputeNormalizedLength(input, buffer);

            input.Seek(position, SeekOrigin.Begin);
            uint h     = (uint)(1L ^ length);
            uint i     = 0u;
            int  shift = 0;

            for (;;)
            {
                int bufferLength = input.Read(buffer, 0, buffer.Length);
                if (bufferLength == 0)
                {
                    break;
                }
                for (int j = 0; j < bufferLength; j++)
                {
                    byte b = buffer[j];
                    if (!MurmurHash2.IsWhitespaceCharacter(b))
                    {
                        i     |= (uint)((uint)b << shift);
                        shift += 8;
                        if (shift == 32)
                        {
                            i    *= 1540483477u;
                            i    ^= i >> 24;
                            i    *= 1540483477u;
                            h    *= 1540483477u;
                            h    ^= i;
                            i     = 0u;
                            shift = 0;
                        }
                    }
                }
            }
            if (shift > 0)
            {
                h ^= i;
                h *= 1540483477u;
            }
            h ^= h >> 13;
            h *= 1540483477u;
            return(h ^ h >> 15);
        }