x31

See: DJB

Tests

Performance

Implementation

finline u32 fastcall x31( const u8 *key, u32 len, u32 seed ) {
	u32 hash = seed + len;
	for ( ; len & ~1; len -= 2, key += 2 )
		hash = ( ( ( hash * 31 ) + key[0] ) * 31 ) + key[1];
	if ( len & 1 )
		hash = ( hash * 31 ) + key[0];
	return hash;
}