mirror of
https://github.com/chillerlan/php-qrcode.git
synced 2026-08-23 15:01:46 +00:00
:octocat: ReedSolomonEncoder: add constructor
This commit is contained in:
@@ -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++){
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user