private unsafe int GetHashCodeLittleEndian()

in Microsoft.Shared.Dna.Hash/AffineHash.cs [600:628]


        private unsafe int GetHashCodeLittleEndian(byte* valuePointer, int length)
        {
            ulong result = 0UL;
            ulong block = 0UL;
            int blocks = length >> 2; // div 4
            uint* blockPointer = (uint*)valuePointer;
            for (int i = 0; i < blocks; i++)
            {
                block = *(blockPointer + i);
                result = this.ComputeSmallBlock(result + block);
            }

            int remainder = length & 3; // mod 4
            if (remainder == 0)
            {
                return (int)result;
            }

            byte* remainderPointer = valuePointer + length - remainder;
            int offset = 0;
            block = 0U;
            for (int i = 0; i < remainder; i++)
            {
                block |= (ulong)(*(remainderPointer + i)) << offset;
                offset += 8;
            }

            return (int)this.ComputeSmallBlock(result + block);
        }