Skip to content

Commit e2645ae

Browse files
committed
Fix for #1
- Fixed fatal error when not using HHVM, thanks @banks. - Extended compatibility to support PHP4.3 + ( http://3v4l.org/5dOD2 )
1 parent e9e830e commit e2645ae

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

murmurhash3_32_gc.php

+15-22
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
*/
1717

1818
function murmurhash3_32_gc($key,$seed=0){
19-
function zfsr($a,$b){return (int)((float)$a/pow(2,(int)$b));}
2019
$klen = strlen($key);
2120
$bytes = $klen - ($remainder = $klen & 3);
2221
$h1 = $seed;
@@ -29,36 +28,30 @@ function zfsr($a,$b){return (int)((float)$a/pow(2,(int)$b));}
2928
((ord($key[++$i]) & 0xff) << 16) |
3029
((ord($key[++$i]) & 0xff) << 24);
3130
++$i;
32-
$k1 = (((($k1 & 0xffff) * $c1) + (((zfsr($k1 , 16) * $c1) & 0xffff) << 16))) & 0xffffffff;
33-
$k1 = ($k1 << 15) | zfsr($k1 , 17);
34-
$k1 = (((($k1 & 0xffff) * $c2) + (((zfsr($k1 , 16) * $c2) & 0xffff) << 16))) & 0xffffffff;
35-
31+
$k1 = (((($k1 & 0xffff) * $c1) + ((((int)((float)$k1 /0x10000) * $c1) & 0xffff) << 16))) & 0xffffffff;
32+
$k1 = ($k1 << 15) | (int)((float)$k1 /pow(2,(int)17));
33+
$k1 = (((($k1 & 0xffff) * $c2) + ((((int)((float)$k1 /0x10000) * $c2) & 0xffff) << 16))) & 0xffffffff;
3634
$h1 ^= $k1;
37-
$h1 = ($h1 << 13) | zfsr($h1 , 19);
38-
$h1b = (((($h1 & 0xffff) * 5) + (((zfsr($h1 , 16) * 5) & 0xffff) << 16))) & 0xffffffff;
39-
$h1 = ((($h1b & 0xffff) + 0x6b64) + (((zfsr($h1b , 16) + 0xe654) & 0xffff) << 16));
35+
$h1 = ($h1 << 13) | (int)((float)$h1 /pow(2,(int)19));
36+
$h1b = (((($h1 & 0xffff) * 5) + ((((int)((float)$h1 /0x10000) * 5) & 0xffff) << 16))) & 0xffffffff;
37+
$h1 = ((($h1b & 0xffff) + 0x6b64) + ((((int)((float)$h1b /0x10000) + 0xe654) & 0xffff) << 16));
4038
}
4139

4240
$k1 = 0;
43-
4441
switch ($remainder) {
4542
case 3: $k1 ^= (ord($key[$i + 2]) & 0xff) << 16;
4643
case 2: $k1 ^= (ord($key[$i + 1]) & 0xff) << 8;
4744
case 1: $k1 ^= (ord($key[$i]) & 0xff);
48-
49-
$k1 = ((($k1 & 0xffff) * $c1) + (((zfsr($k1 , 16) * $c1) & 0xffff) << 16)) & 0xffffffff;
50-
$k1 = ($k1 << 15) | zfsr($k1 , 17);
51-
$k1 = ((($k1 & 0xffff) * $c2) + (((zfsr($k1 , 16) * $c2) & 0xffff) << 16)) & 0xffffffff;
45+
$k1 = ((($k1 & 0xffff) * $c1) + ((((int)((float)$k1 /0x10000) * $c1) & 0xffff) << 16)) & 0xffffffff;
46+
$k1 = ($k1 << 15) | (int)((float)$k1 /pow(2,(int)17));
47+
$k1 = ((($k1 & 0xffff) * $c2) + ((((int)((float)$k1 /0x10000) * $c2) & 0xffff) << 16)) & 0xffffffff;
5248
$h1 ^= $k1;
5349
}
54-
5550
$h1 ^= $klen;
56-
57-
$h1 ^= zfsr($h1 , 16);
58-
$h1 = ((($h1 & 0xffff) * 0x85ebca6b) + (((zfsr($h1 , 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
59-
$h1 ^= zfsr($h1 , 13);
60-
$h1 = (((($h1 & 0xffff) * 0xc2b2ae35) + (((zfsr($h1 , 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
61-
$h1 ^= zfsr($h1 , 16);
62-
63-
return base_convert(zfsr($h1,0),10,32);
51+
$h1 ^= (int)((float)$h1 /0x10000);
52+
$h1 = ((($h1 & 0xffff) * 0x85ebca6b) + ((((int)((float)$h1 /0x10000) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
53+
$h1 ^= (int)((float)$h1 /pow(2,(int)13));
54+
$h1 = (((($h1 & 0xffff) * 0xc2b2ae35) + ((((int)((float)$h1 /0x10000) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
55+
$h1 ^= (int)((float)$h1 /0x10000);
56+
return base_convert((int)$h1,10,32);
6457
}

0 commit comments

Comments
 (0)