| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 | 
							- <?php
 
- declare(strict_types = 1);
 
- namespace BaconQrCode\Encoder;
 
- use SplFixedArray;
 
- use Traversable;
 
- /**
 
-  * Byte matrix.
 
-  */
 
- final class ByteMatrix
 
- {
 
-     /**
 
-      * Bytes in the matrix, represented as array.
 
-      *
 
-      * @var SplFixedArray<SplFixedArray<int>>
 
-      */
 
-     private $bytes;
 
-     /**
 
-      * Width of the matrix.
 
-      *
 
-      * @var int
 
-      */
 
-     private $width;
 
-     /**
 
-      * Height of the matrix.
 
-      *
 
-      * @var int
 
-      */
 
-     private $height;
 
-     public function __construct(int $width, int $height)
 
-     {
 
-         $this->height = $height;
 
-         $this->width = $width;
 
-         $this->bytes = new SplFixedArray($height);
 
-         for ($y = 0; $y < $height; ++$y) {
 
-             $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0));
 
-         }
 
-     }
 
-     /**
 
-      * Gets the width of the matrix.
 
-      */
 
-     public function getWidth() : int
 
-     {
 
-         return $this->width;
 
-     }
 
-     /**
 
-      * Gets the height of the matrix.
 
-      */
 
-     public function getHeight() : int
 
-     {
 
-         return $this->height;
 
-     }
 
-     /**
 
-      * Gets the internal representation of the matrix.
 
-      *
 
-      * @return SplFixedArray<SplFixedArray<int>>
 
-      */
 
-     public function getArray() : SplFixedArray
 
-     {
 
-         return $this->bytes;
 
-     }
 
-     /**
 
-      * @return Traversable<int>
 
-      */
 
-     public function getBytes() : Traversable
 
-     {
 
-         foreach ($this->bytes as $row) {
 
-             foreach ($row as $byte) {
 
-                 yield $byte;
 
-             }
 
-         }
 
-     }
 
-     /**
 
-      * Gets the byte for a specific position.
 
-      */
 
-     public function get(int $x, int $y) : int
 
-     {
 
-         return $this->bytes[$y][$x];
 
-     }
 
-     /**
 
-      * Sets the byte for a specific position.
 
-      */
 
-     public function set(int $x, int $y, int $value) : void
 
-     {
 
-         $this->bytes[$y][$x] = $value;
 
-     }
 
-     /**
 
-      * Clears the matrix with a specific value.
 
-      */
 
-     public function clear(int $value) : void
 
-     {
 
-         for ($y = 0; $y < $this->height; ++$y) {
 
-             for ($x = 0; $x < $this->width; ++$x) {
 
-                 $this->bytes[$y][$x] = $value;
 
-             }
 
-         }
 
-     }
 
-     public function __clone()
 
-     {
 
-         $this->bytes = clone $this->bytes;
 
-         foreach ($this->bytes as $index => $row) {
 
-             $this->bytes[$index] = clone $row;
 
-         }
 
-     }
 
-     /**
 
-      * Returns a string representation of the matrix.
 
-      */
 
-     public function __toString() : string
 
-     {
 
-         $result = '';
 
-         for ($y = 0; $y < $this->height; $y++) {
 
-             for ($x = 0; $x < $this->width; $x++) {
 
-                 switch ($this->bytes[$y][$x]) {
 
-                     case 0:
 
-                         $result .= ' 0';
 
-                         break;
 
-                     case 1:
 
-                         $result .= ' 1';
 
-                         break;
 
-                     default:
 
-                         $result .= '  ';
 
-                         break;
 
-                 }
 
-             }
 
-             $result .= "\n";
 
-         }
 
-         return $result;
 
-     }
 
- }
 
 
  |