Преглед изворни кода

Fix wrong binary notation.

Cannot use 0b yet since it is PHP 5.4 only.
Daniele Alessandri пре 13 година
родитељ
комит
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])) {
         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;