diff --git a/src/Common/ReedSolomonEncoder.php b/src/Common/ReedSolomonEncoder.php index 375ac67d8..d6e2f2219 100644 --- a/src/Common/ReedSolomonEncoder.php +++ b/src/Common/ReedSolomonEncoder.php @@ -19,16 +19,27 @@ use function array_fill, array_merge, count, max; */ final class ReedSolomonEncoder{ + private Version $version; + private EccLevel $eccLevel; + private array $interleavedData; private int $interleavedDataIndex; + /** + * ReedSolomonDecoder constructor + */ + public function __construct(Version $version, EccLevel $eccLevel){ + $this->version = $version; + $this->eccLevel = $eccLevel; + } + /** * ECC interleaving * * @throws \chillerlan\QRCode\QRCodeException */ - public function interleaveEcBytes(BitBuffer $bitBuffer, Version $version, EccLevel $eccLevel):array{ - [$numEccCodewords, [[$l1, $b1], [$l2, $b2]]] = $version->getRSBlocks($eccLevel); + public function interleaveEcBytes(BitBuffer $bitBuffer):array{ + [$numEccCodewords, [[$l1, $b1], [$l2, $b2]]] = $this->version->getRSBlocks($this->eccLevel); $rsBlocks = array_fill(0, $l1, [$numEccCodewords + $b1, $b1]); @@ -53,13 +64,13 @@ final class ReedSolomonEncoder{ } $ecByteCount = $rsBlockTotal - $dataByteCount; - $ecBytes[$key] = $this->generateEcBytes($dataBytes[$key], $ecByteCount); + $ecBytes[$key] = $this->encode($dataBytes[$key], $ecByteCount); $maxDataBytes = max($maxDataBytes, $dataByteCount); $maxEcBytes = max($maxEcBytes, $ecByteCount); $dataByteOffset += $dataByteCount; } - $this->interleavedData = array_fill(0, $version->getTotalCodewords(), 0); + $this->interleavedData = array_fill(0, $this->version->getTotalCodewords(), 0); $this->interleavedDataIndex = 0; $numRsBlocks = $l1 + $l2; @@ -72,7 +83,7 @@ final class ReedSolomonEncoder{ /** * */ - private function generateEcBytes(array $dataBytes, int $ecByteCount):array{ + private function encode(array $dataBytes, int $ecByteCount):array{ $rsPoly = new GenericGFPoly([1]); for($i = 0; $i < $ecByteCount; $i++){ diff --git a/src/Data/QRMatrix.php b/src/Data/QRMatrix.php index 0f291b031..6cfc8176a 100755 --- a/src/Data/QRMatrix.php +++ b/src/Data/QRMatrix.php @@ -595,7 +595,7 @@ class QRMatrix{ * Maps the interleaved binary $data on the matrix */ public function writeCodewords(BitBuffer $bitBuffer):self{ - $data = (new ReedSolomonEncoder)->interleaveEcBytes($bitBuffer, $this->version, $this->eccLevel); + $data = (new ReedSolomonEncoder($this->version, $this->eccLevel))->interleaveEcBytes($bitBuffer); $byteCount = count($data); $iByte = 0; $iBit = 7;