Kaynağa Gözat

:octocat: +proper getters for BitBuffer

codemasher 5 yıl önce
ebeveyn
işleme
4c395abfd4

+ 9 - 7
src/Data/QRDataAbstract.php

@@ -182,30 +182,30 @@ abstract class QRDataAbstract implements QRDataInterface{
 		$this->write($data);
 
 		// overflow, likely caused due to invalid version setting
-		if($this->bitBuffer->length > $MAX_BITS){
-			throw new QRCodeDataException(sprintf('code length overflow. (%d > %d bit)', $this->bitBuffer->length, $MAX_BITS));
+		if($this->bitBuffer->getLength() > $MAX_BITS){
+			throw new QRCodeDataException(sprintf('code length overflow. (%d > %d bit)', $this->bitBuffer->getLength(), $MAX_BITS));
 		}
 
 		// end code.
-		if($this->bitBuffer->length + 4 <= $MAX_BITS){
+		if($this->bitBuffer->getLength() + 4 <= $MAX_BITS){
 			$this->bitBuffer->put(0, 4);
 		}
 
 		// padding
-		while($this->bitBuffer->length % 8 !== 0){
+		while($this->bitBuffer->getLength() % 8 !== 0){
 			$this->bitBuffer->putBit(false);
 		}
 
 		// padding
 		while(true){
 
-			if($this->bitBuffer->length >= $MAX_BITS){
+			if($this->bitBuffer->getLength() >= $MAX_BITS){
 				break;
 			}
 
 			$this->bitBuffer->put(0xEC, 8);
 
-			if($this->bitBuffer->length >= $MAX_BITS){
+			if($this->bitBuffer->getLength() >= $MAX_BITS){
 				break;
 			}
 
@@ -236,6 +236,8 @@ abstract class QRDataAbstract implements QRDataInterface{
 		$maxEcCount     = 0;
 		$offset         = 0;
 
+		$bitBuffer = $this->bitBuffer->getBuffer();
+
 		foreach($rsBlocks as $key => $block){
 			[$rsBlockTotal, $dcCount] = $block;
 
@@ -245,7 +247,7 @@ abstract class QRDataAbstract implements QRDataInterface{
 			$this->dcdata[$key] = array_fill(0, $dcCount, null);
 
 			foreach($this->dcdata[$key] as $a => $_z){
-				$this->dcdata[$key][$a] = 0xff & $this->bitBuffer->buffer[$a + $offset];
+				$this->dcdata[$key][$a] = 0xff & $bitBuffer[$a + $offset];
 			}
 
 			[$num, $add] = $this->poly($key, $ecCount);

+ 16 - 2
src/Helpers/BitBuffer.php

@@ -17,9 +17,9 @@ use function count, floor;
 final class BitBuffer{
 
 	/** @var int[] */
-	public array $buffer = [];
+	protected array $buffer = [];
 
-	public int $length = 0;
+	protected int $length = 0;
 
 	/**
 	 *
@@ -62,4 +62,18 @@ final class BitBuffer{
 		return $this;
 	}
 
+	/**
+	 * returns the current buffer length
+	 */
+	public function getLength():int{
+		return $this->length;
+	}
+
+	/**
+	 * returns the buffer content
+	 */
+	public function getBuffer():array{
+		return $this->buffer;
+	}
+
 }

+ 4 - 4
tests/Helpers/BitBufferTest.php

@@ -37,14 +37,14 @@ class BitBufferTest extends QRTestAbstract{
 	 */
 	public function testPut(int $data, int $value):void{
 		$this->bitBuffer->put($data, 4);
-		$this::assertSame($value, $this->bitBuffer->buffer[0]);
-		$this::assertSame(4, $this->bitBuffer->length);
+		$this::assertSame($value, $this->bitBuffer->getBuffer()[0]);
+		$this::assertSame(4, $this->bitBuffer->getLength());
 	}
 
 	public function testClear():void{
 		$this->bitBuffer->clear();
-		$this::assertSame([], $this->bitBuffer->buffer);
-		$this::assertSame(0, $this->bitBuffer->length);
+		$this::assertSame([], $this->bitBuffer->getBuffer());
+		$this::assertSame(0, $this->bitBuffer->getLength());
 	}
 
 }