75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
declare(strict_types = 1);
 | 
						|
 | 
						|
namespace BaconQrCode\Common;
 | 
						|
 | 
						|
/**
 | 
						|
 * Encapsulates a set of error-correction blocks in one symbol version.
 | 
						|
 *
 | 
						|
 * Most versions will use blocks of differing sizes within one version, so, this encapsulates the parameters for each
 | 
						|
 * set of blocks. It also holds the number of error-correction codewords per block since it will be the same across all
 | 
						|
 * blocks within one version.
 | 
						|
 */
 | 
						|
final class EcBlocks
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Number of EC codewords per block.
 | 
						|
     *
 | 
						|
     * @var int
 | 
						|
     */
 | 
						|
    private $ecCodewordsPerBlock;
 | 
						|
 | 
						|
    /**
 | 
						|
     * List of EC blocks.
 | 
						|
     *
 | 
						|
     * @var EcBlock[]
 | 
						|
     */
 | 
						|
    private $ecBlocks;
 | 
						|
 | 
						|
    public function __construct(int $ecCodewordsPerBlock, EcBlock ...$ecBlocks)
 | 
						|
    {
 | 
						|
        $this->ecCodewordsPerBlock = $ecCodewordsPerBlock;
 | 
						|
        $this->ecBlocks = $ecBlocks;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the number of EC codewords per block.
 | 
						|
     */
 | 
						|
    public function getEcCodewordsPerBlock() : int
 | 
						|
    {
 | 
						|
        return $this->ecCodewordsPerBlock;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the total number of EC block appearances.
 | 
						|
     */
 | 
						|
    public function getNumBlocks() : int
 | 
						|
    {
 | 
						|
        $total = 0;
 | 
						|
 | 
						|
        foreach ($this->ecBlocks as $ecBlock) {
 | 
						|
            $total += $ecBlock->getCount();
 | 
						|
        }
 | 
						|
 | 
						|
        return $total;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the total count of EC codewords.
 | 
						|
     */
 | 
						|
    public function getTotalEcCodewords() : int
 | 
						|
    {
 | 
						|
        return $this->ecCodewordsPerBlock * $this->getNumBlocks();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Returns the EC blocks included in this collection.
 | 
						|
     *
 | 
						|
     * @return EcBlock[]
 | 
						|
     */
 | 
						|
    public function getEcBlocks() : array
 | 
						|
    {
 | 
						|
        return $this->ecBlocks;
 | 
						|
    }
 | 
						|
}
 |