16
16
*/
17
17
18
18
function murmurhash3_32_gc ($ key ,$ seed =0 ){
19
- function zfsr ($ a ,$ b ){return (int )((float )$ a /pow (2 ,(int )$ b ));}
20
19
$ klen = strlen ($ key );
21
20
$ bytes = $ klen - ($ remainder = $ klen & 3 );
22
21
$ h1 = $ seed ;
@@ -29,36 +28,30 @@ function zfsr($a,$b){return (int)((float)$a/pow(2,(int)$b));}
29
28
((ord ($ key [++$ i ]) & 0xff ) << 16 ) |
30
29
((ord ($ key [++$ i ]) & 0xff ) << 24 );
31
30
++$ 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 ;
36
34
$ 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 ));
40
38
}
41
39
42
40
$ k1 = 0 ;
43
-
44
41
switch ($ remainder ) {
45
42
case 3 : $ k1 ^= (ord ($ key [$ i + 2 ]) & 0xff ) << 16 ;
46
43
case 2 : $ k1 ^= (ord ($ key [$ i + 1 ]) & 0xff ) << 8 ;
47
44
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 ;
52
48
$ h1 ^= $ k1 ;
53
49
}
54
-
55
50
$ 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 );
64
57
}
0 commit comments