Ver Fonte

Fix wrong binary notation.

Cannot use 0b yet since it is PHP 5.4 only.
Daniele Alessandri há 12 anos atrás
pai
commit
024a31d571

+ 1 - 1
lib/Predis/Connection/RedisCluster.php

@@ -127,7 +127,7 @@ class RedisCluster implements ClusterConnectionInterface, \IteratorAggregate, \C
             }
             }
         }
         }
 
 
-        $slot = $hash & 0x0FFF;
+        $slot = $hash & 4095; // 0x0FFF
 
 
         if (isset($this->slots[$slot])) {
         if (isset($this->slots[$slot])) {
             return $this->slots[$slot];
             return $this->slots[$slot];

+ 37 - 2
lib/Predis/Distribution/CRC16HashGenerator.php

@@ -18,7 +18,7 @@ namespace Predis\Distribution;
  */
  */
 class CRC16HashGenerator implements HashGeneratorInterface
 class CRC16HashGenerator implements HashGeneratorInterface
 {
 {
-    private static $CCITT_16 = array(
+/*
         0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
         0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
         0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
         0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
         0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
         0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
@@ -51,6 +51,41 @@ class CRC16HashGenerator implements HashGeneratorInterface
         0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
         0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
         0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
         0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
         0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
         0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
+*/
+
+    private static $CCITT_16 = array(
+        0, 4129, 8258, 12387, 16516, 20645, 24774, 28903,
+        33032, 37161, 41290, 45419, 49548, 53677, 57806, 61935,
+        4657, 528, 12915, 8786, 21173, 17044, 29431, 25302,
+        37689, 33560, 45947, 41818, 54205, 50076, 62463, 58334,
+        9314, 13379, 1056, 5121, 25830, 29895, 17572, 21637,
+        42346, 46411, 34088, 38153, 58862, 62927, 50604, 54669,
+        13907, 9842, 5649, 1584, 30423, 26358, 22165, 18100,
+        46939, 42874, 38681, 34616, 63455, 59390, 55197, 51132,
+        18628, 22757, 26758, 30887, 2112, 6241, 10242, 14371,
+        51660, 55789, 59790, 63919, 35144, 39273, 43274, 47403,
+        23285, 19156, 31415, 27286, 6769, 2640, 14899, 10770,
+        56317, 52188, 64447, 60318, 39801, 35672, 47931, 43802,
+        27814, 31879, 19684, 23749, 11298, 15363, 3168, 7233,
+        60846, 64911, 52716, 56781, 44330, 48395, 36200, 40265,
+        32407, 28342, 24277, 20212, 15891, 11826, 7761, 3696,
+        65439, 61374, 57309, 53244, 48923, 44858, 40793, 36728,
+        37256, 33193, 45514, 41451, 53516, 49453, 61774, 57711,
+        4224, 161, 12482, 8419, 20484, 16421, 28742, 24679,
+        33721, 37784, 41979, 46042, 49981, 54044, 58239, 62302,
+        689, 4752, 8947, 13010, 16949, 21012, 25207, 29270,
+        46570, 42443, 38312, 34185, 62830, 58703, 54572, 50445,
+        13538, 9411, 5280, 1153, 29798, 25671, 21540, 17413,
+        42971, 47098, 34713, 38840, 59231, 63358, 50973, 55100,
+        9939, 14066, 1681, 5808, 26199, 30326, 17941, 22068,
+        55628, 51565, 63758, 59695, 39368, 35305, 47498, 43435,
+        22596, 18533, 30726, 26663, 6336, 2273, 14466, 10403,
+        52093, 56156, 60223, 64286, 35833, 39896, 43963, 48026,
+        19061, 23124, 27191, 31254, 2801, 6864, 10931, 14994,
+        64814, 60687, 56684, 52557, 48554, 44427, 40424, 36297,
+        31782, 27655, 23652, 19525, 15522, 11395, 7392, 3265,
+        61215, 65342, 53085, 57212, 44955, 49082, 36825, 40952,
+        28183, 32310, 20053, 24180, 11923, 16050, 3793, 7920,
     );
     );
 
 
     /**
     /**
@@ -64,7 +99,7 @@ class CRC16HashGenerator implements HashGeneratorInterface
         $strlen = strlen($value);
         $strlen = strlen($value);
 
 
         for ($i = 0; $i < $strlen; $i++) {
         for ($i = 0; $i < $strlen; $i++) {
-            $crc = (($crc << 8) ^ $CCITT_16[($crc >> 8) ^ ord($value[$i])]) & 0xFFFF;
+            $crc = (($crc << 8) ^ $CCITT_16[($crc >> 8) ^ ord($value[$i])]) & 65535; // 0xFFFF
         }
         }
 
 
         return $crc;
         return $crc;