From 3c42ccb259a64f33009f5d0fef2d603f0fd2850d Mon Sep 17 00:00:00 2001 From: smiley Date: Tue, 10 May 2022 14:30:30 +0200 Subject: [PATCH] :shower: unify exceptions to QRCodeException --- src/Common/BitBuffer.php | 6 +++--- src/Common/ECICharset.php | 6 +++--- src/Common/GF256.php | 11 +++++++---- src/Common/GenericGFPoly.php | 17 +++++++++-------- src/Common/ReedSolomonDecoder.php | 16 ++++++++-------- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/src/Common/BitBuffer.php b/src/Common/BitBuffer.php index 92b5fa3b9..8c6682803 100644 --- a/src/Common/BitBuffer.php +++ b/src/Common/BitBuffer.php @@ -10,7 +10,7 @@ namespace chillerlan\QRCode\Common; -use InvalidArgumentException; +use chillerlan\QRCode\QRCodeException; use function count, floor, min; /** @@ -108,12 +108,12 @@ final class BitBuffer{ * @param int $numBits number of bits to read * * @return int representing the bits read. The bits will appear as the least-significant bits of the int - * @throws InvalidArgumentException if numBits isn't in [1,32] or more than is available + * @throws \chillerlan\QRCode\QRCodeException if numBits isn't in [1,32] or more than is available */ public function read(int $numBits):int{ if($numBits < 1 || $numBits > 32 || $numBits > $this->available()){ - throw new InvalidArgumentException('invalid $numBits: '.$numBits); + throw new QRCodeException('invalid $numBits: '.$numBits); } $result = 0; diff --git a/src/Common/ECICharset.php b/src/Common/ECICharset.php index 48c3c3cf5..dd2bac15f 100644 --- a/src/Common/ECICharset.php +++ b/src/Common/ECICharset.php @@ -10,7 +10,7 @@ namespace chillerlan\QRCode\Common; -use InvalidArgumentException; +use chillerlan\QRCode\QRCodeException; use function array_key_exists; /** @@ -93,12 +93,12 @@ final class ECICharset{ private int $charsetID; /** - * + * @throws \chillerlan\QRCode\QRCodeException */ public function __construct(int $charsetID){ if(!array_key_exists($charsetID, self::MB_ENCODINGS)){ - throw new InvalidArgumentException('invalid charset id: '.$charsetID); + throw new QRCodeException('invalid charset id: '.$charsetID); } $this->charsetID = $charsetID; diff --git a/src/Common/GF256.php b/src/Common/GF256.php index 7b2bfa98a..4d526ebe2 100644 --- a/src/Common/GF256.php +++ b/src/Common/GF256.php @@ -11,7 +11,7 @@ namespace chillerlan\QRCode\Common; -use InvalidArgumentException; +use chillerlan\QRCode\QRCodeException; use function array_fill; @@ -84,11 +84,12 @@ final class GF256{ /** * @return GenericGFPoly the monomial representing coefficient * x^degree + * @throws \chillerlan\QRCode\QRCodeException */ public static function buildMonomial(int $degree, int $coefficient):GenericGFPoly{ if($degree < 0){ - throw new InvalidArgumentException(); + throw new QRCodeException('degree < 0'); } $coefficients = array_fill(0, $degree + 1, 0); @@ -114,11 +115,12 @@ final class GF256{ /** * @return int base 2 log of a in GF(size) + * @throws \chillerlan\QRCode\QRCodeException */ public static function log(int $a):int{ if($a < 1){ - throw new InvalidArgumentException(); + throw new QRCodeException('$a < 1'); } return self::logTable[$a]; @@ -126,11 +128,12 @@ final class GF256{ /** * @return int multiplicative inverse of a + * @throws \chillerlan\QRCode\QRCodeException */ public static function inverse(int $a):int{ if($a === 0){ - throw new InvalidArgumentException(); + throw new QRCodeException('$a === 0'); } return self::expTable[256 - self::logTable[$a] - 1]; diff --git a/src/Common/GenericGFPoly.php b/src/Common/GenericGFPoly.php index c46e77e4a..d4e6013ab 100644 --- a/src/Common/GenericGFPoly.php +++ b/src/Common/GenericGFPoly.php @@ -11,7 +11,7 @@ namespace chillerlan\QRCode\Common; -use InvalidArgumentException; +use chillerlan\QRCode\QRCodeException; use function array_fill, array_slice, array_splice, count; @@ -33,18 +33,18 @@ final class GenericGFPoly{ * from most significant (highest-power term) coefficient to least significant * @param int|null $degree * - * @throws \InvalidArgumentException if argument is null or empty, or if leading coefficient is 0 and this is not a - * constant polynomial (that is, it is not the monomial "0") + * @throws \chillerlan\QRCode\QRCodeException if argument is null or empty, or if leading coefficient is 0 and this + * is not a constant polynomial (that is, it is not the monomial "0") */ public function __construct(array $coefficients, int $degree = null){ $degree ??= 0; if(empty($coefficients)){ - throw new InvalidArgumentException('arg $coefficients is empty'); + throw new QRCodeException('arg $coefficients is empty'); } if($degree < 0){ - throw new InvalidArgumentException('negative degree'); + throw new QRCodeException('negative degree'); } $coefficientsLength = count($coefficients); @@ -138,11 +138,12 @@ final class GenericGFPoly{ /** * @return \chillerlan\QRCode\Common\GenericGFPoly[] [quotient, remainder] + * @throws \chillerlan\QRCode\QRCodeException */ public function divide(GenericGFPoly $other):array{ if($other->isZero()){ - throw new InvalidArgumentException('Division by 0'); + throw new QRCodeException('Division by 0'); } $quotient = new self([0]); @@ -185,12 +186,12 @@ final class GenericGFPoly{ } /** - * + * @throws \chillerlan\QRCode\QRCodeException */ public function multiplyByMonomial(int $degree, int $coefficient):self{ if($degree < 0){ - throw new InvalidArgumentException(); + throw new QRCodeException('degree < 0'); } if($coefficient === 0){ diff --git a/src/Common/ReedSolomonDecoder.php b/src/Common/ReedSolomonDecoder.php index 5872d6aee..a10fc62cc 100644 --- a/src/Common/ReedSolomonDecoder.php +++ b/src/Common/ReedSolomonDecoder.php @@ -11,7 +11,7 @@ namespace chillerlan\QRCode\Common; -use RuntimeException; +use chillerlan\QRCode\QRCodeException; use function array_fill, array_reverse, count; /** @@ -85,7 +85,7 @@ final class ReedSolomonDecoder{ * @param int $numEccCodewords number of error-correction codewords available * * @return int[] - * @throws \RuntimeException if decoding fails for any reason + * @throws \chillerlan\QRCode\QRCodeException if decoding fails for any reason */ private function decodeWords(array $received, int $numEccCodewords):array{ $poly = new GenericGFPoly($received); @@ -119,7 +119,7 @@ final class ReedSolomonDecoder{ $position = $receivedCount - 1 - GF256::log($errorLocations[$i]); if($position < 0){ - throw new RuntimeException('Bad error location'); + throw new QRCodeException('Bad error location'); } $received[$position] ^= $errorMagnitudes[$i]; @@ -130,7 +130,7 @@ final class ReedSolomonDecoder{ /** * @return \chillerlan\QRCode\Common\GenericGFPoly[] [sigma, omega] - * @throws \RuntimeException + * @throws \chillerlan\QRCode\QRCodeException */ private function runEuclideanAlgorithm(GenericGFPoly $a, GenericGFPoly $b, int $R):array{ // Assume a's degree is >= b's @@ -158,14 +158,14 @@ final class ReedSolomonDecoder{ $t = $q->multiply($tLast)->addOrSubtract($tLastLast); if($r->getDegree() >= $rLast->getDegree()){ - throw new RuntimeException('Division algorithm failed to reduce polynomial?'); + throw new QRCodeException('Division algorithm failed to reduce polynomial?'); } } $sigmaTildeAtZero = $t->getCoefficient(0); if($sigmaTildeAtZero === 0){ - throw new RuntimeException('sigmaTilde(0) was zero'); + throw new QRCodeException('sigmaTilde(0) was zero'); } $inverse = GF256::inverse($sigmaTildeAtZero); @@ -174,7 +174,7 @@ final class ReedSolomonDecoder{ } /** - * @throws \RuntimeException + * @throws \chillerlan\QRCode\QRCodeException */ private function findErrorLocations(GenericGFPoly $errorLocator):array{ // This is a direct application of Chien's search @@ -195,7 +195,7 @@ final class ReedSolomonDecoder{ } if($e !== $numErrors){ - throw new RuntimeException('Error locator degree does not match number of roots'); + throw new QRCodeException('Error locator degree does not match number of roots'); } return $result;