Skip to content

Commit 7c183e7

Browse files
committed
🛀 merge QRMatrix and BitMatrix
1 parent fd885ff commit 7c183e7

File tree

12 files changed

+343
-583
lines changed

12 files changed

+343
-583
lines changed

src/Common/FormatInformation.php

Lines changed: 0 additions & 102 deletions
This file was deleted.

src/Common/ReedSolomonEncoder.php

Lines changed: 5 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010

1111
namespace chillerlan\QRCode\Common;
1212

13-
use chillerlan\QRCode\Data\QRMatrix;
1413
use function array_fill, array_merge, count, max;
1514

1615
/**
@@ -25,10 +24,11 @@ final class ReedSolomonEncoder{
2524

2625
/**
2726
* ECC interleaving
27+
*
28+
* @throws \chillerlan\QRCode\QRCodeException
2829
*/
29-
public function interleaveEcBytes(BitBuffer $bitBuffer, QRMatrix $matrix):QRMatrix{
30-
$version = $matrix->version();
31-
[$numEccCodewords, [[$l1, $b1], [$l2, $b2]]] = $version->getRSBlocks($matrix->eccLevel());
30+
public function interleaveEcBytes(BitBuffer $bitBuffer, Version $version, EccLevel $eccLevel):array{
31+
[$numEccCodewords, [[$l1, $b1], [$l2, $b2]]] = $version->getRSBlocks($eccLevel);
3232

3333
$rsBlocks = array_fill(0, $l1, [$numEccCodewords + $b1, $b1]);
3434

@@ -66,7 +66,7 @@ public function interleaveEcBytes(BitBuffer $bitBuffer, QRMatrix $matrix):QRMatr
6666
$this->interleave($dataBytes, $maxDataBytes, $numRsBlocks);
6767
$this->interleave($ecBytes, $maxEcBytes, $numRsBlocks);
6868

69-
return $this->mapData($matrix);
69+
return $this->interleavedData;
7070
}
7171

7272
/**
@@ -110,60 +110,4 @@ private function interleave(array $byteArray, int $maxBytes, int $numRsBlocks):v
110110
}
111111
}
112112

113-
/**
114-
* Maps the interleaved binary $data on the matrix
115-
*/
116-
private function mapData(QRMatrix $matrix):QRMatrix{
117-
$byteCount = count($this->interleavedData);
118-
$size = $matrix->size();
119-
$y = $size - 1;
120-
$inc = -1;
121-
$byteIndex = 0;
122-
$bitIndex = 7;
123-
124-
for($i = $y; $i > 0; $i -= 2){
125-
126-
if($i === 6){
127-
$i--;
128-
}
129-
130-
while(true){
131-
for($c = 0; $c < 2; $c++){
132-
$x = $i - $c;
133-
134-
if($matrix->get($x, $y) !== QRMatrix::M_NULL){
135-
continue;
136-
}
137-
138-
$v = false;
139-
140-
if($byteIndex < $byteCount){
141-
$v = (($this->interleavedData[$byteIndex] >> $bitIndex) & 1) === 1;
142-
}
143-
144-
$matrix->set($x, $y, $v, QRMatrix::M_DATA);
145-
$bitIndex--;
146-
147-
if($bitIndex === -1){
148-
$byteIndex++;
149-
$bitIndex = 7;
150-
}
151-
152-
}
153-
154-
$y += $inc;
155-
156-
if($y < 0 || $size <= $y){
157-
$y -= $inc;
158-
$inc = -$inc;
159-
160-
break;
161-
}
162-
163-
}
164-
}
165-
166-
return $matrix;
167-
}
168-
169113
}

src/Data/QRData.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
namespace chillerlan\QRCode\Data;
1212

13-
use chillerlan\QRCode\Common\{BitBuffer, EccLevel, MaskPattern, Mode, ReedSolomonEncoder, Version};
13+
use chillerlan\QRCode\Common\{BitBuffer, EccLevel, MaskPattern, Mode, Version};
1414
use chillerlan\QRCode\QRCode;
1515
use chillerlan\Settings\SettingsContainerInterface;
1616

@@ -94,14 +94,10 @@ public function setData(array $dataSegments):self{
9494
* returns a fresh matrix object with the data written and masked with the given $maskPattern
9595
*/
9696
public function writeMatrix(MaskPattern $maskPattern):QRMatrix{
97-
$matrix = (new QRMatrix($this->version, $this->eccLevel))
97+
return (new QRMatrix($this->version, $this->eccLevel, $maskPattern))
9898
->initFunctionalPatterns()
99-
->initFormatInfo($maskPattern)
100-
;
101-
102-
return (new ReedSolomonEncoder)
103-
->interleaveEcBytes($this->bitBuffer, $matrix)
104-
->mask($maskPattern)
99+
->writeCodewords($this->bitBuffer)
100+
->mask()
105101
;
106102
}
107103

0 commit comments

Comments
 (0)