1 module ithox.qrcode.common.ecblocks;
2 
3 struct EcBlock
4 {
5     int count;
6     int dataCodewords;
7 }
8 
9 class EcBlocks
10 {
11 
12     /**
13 	* Number of EC codewords per block.
14 	*
15 	* @var integer
16 	*/
17     protected int ecCodewordsPerBlock;
18     /**
19 	* List of EC blocks.
20 	*
21 	* @var SplFixedArray
22 	*/
23     protected EcBlock[] ecBlocks;
24     /**
25 	* Creates a new EC blocks instance.
26 	*
27 	* @param integer      $ecCodewordsPerBlock
28 	* @param EcBlock      $ecb1
29 	* @param EcBlock|null $ecb2
30 	*/
31     this(int ecCodewordsPerBlock, EcBlock* ecb1, EcBlock* ecb2)
32     {
33         this.ecCodewordsPerBlock = ecCodewordsPerBlock;
34 
35         this.ecBlocks = new EcBlock[2];
36         this.ecBlocks[0] = *ecb1;
37         this.ecBlocks[1] = *ecb2;
38     }
39 
40     this(int ecCodewordsPerBlock, EcBlock* ecb1)
41     {
42         this.ecCodewordsPerBlock = ecCodewordsPerBlock;
43         this.ecBlocks = new EcBlock[1];
44         this.ecBlocks[0] = *ecb1;
45 
46     }
47     /**
48 	* Gets the number of EC codewords per block.
49 	*
50 	* @return integer
51 	*/
52     public int getEcCodewordsPerBlock()
53     {
54         return this.ecCodewordsPerBlock;
55     }
56     /**
57 	* Gets the total number of EC block appearances.
58 	*
59 	* @return integer
60 	*/
61     public int getNumBlocks()
62     {
63         auto total = 0;
64         foreach (ecBlock; this.ecBlocks)
65         {
66             total += ecBlock.count;
67         }
68         return total;
69     }
70     /**
71 	* Gets the total count of EC codewords.
72 	*
73 	* @return integer
74 	*/
75     public int getTotalEcCodewords()
76     {
77         return this.ecCodewordsPerBlock * this.getNumBlocks();
78     }
79     /**
80 	* Gets the EC blocks included in this collection.
81 	*
82 	* @return SplFixedArray
83 	*/
84     public EcBlock[] getEcBlocks()
85     {
86         return ecBlocks;
87     }
88 }