> $b ) | ( 0x40000000 >> ( $b - 1 ) ); } else { return $a >> $b; } } /** * The CDB hash function. * * @param string $s * * @return int */ public static function hash( $s ) { $h = 5381; $len = strlen( $s ); for ( $i = 0; $i < $len; $i++ ) { $h5 = ( $h << 5 ) & 0xffffffff; // Do a 32-bit sum // Inlined here for speed $sum = ( $h & 0x3fffffff ) + ( $h5 & 0x3fffffff ); $h = ( ( $sum & 0x40000000 ? 1 : 0 ) + ( $h & 0x80000000 ? 2 : 0 ) + ( $h & 0x40000000 ? 1 : 0 ) + ( $h5 & 0x80000000 ? 2 : 0 ) + ( $h5 & 0x40000000 ? 1 : 0 ) ) << 30 | ( $sum & 0x3fffffff ); $h ^= ord( $s[$i] ); $h &= 0xffffffff; } return $h; } }