فهرست منبع

Fix wrong binary notation.

Cannot use 0b yet since it is PHP 5.4 only.
Daniele Alessandri 12 سال پیش
والد
کامیت
024a31d571
2فایلهای تغییر یافته به همراه38 افزوده شده و 3 حذف شده
  1. 1 1
      lib/Predis/Connection/RedisCluster.php
  2. 37 2
      lib/Predis/Distribution/CRC16HashGenerator.php

+ 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])) {
             return $this->slots[$slot];

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

@@ -18,7 +18,7 @@ namespace Predis\Distribution;
  */
 class CRC16HashGenerator implements HashGeneratorInterface
 {
-    private static $CCITT_16 = array(
+/*
         0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
         0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
         0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
@@ -51,6 +51,41 @@ class CRC16HashGenerator implements HashGeneratorInterface
         0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
         0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
         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);
 
         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;