blob: 67ca42804c301844c00fd64518c7575f2e3743b3 [file] [log] [blame]
Dan Sinclair1770c022016-03-14 14:14:16 -04001// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6// Original code is licensed as follows:
7/*
8 * Copyright 2007 ZXing authors
9 *
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
13 *
14 * http://www.apache.org/licenses/LICENSE-2.0
15 *
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 */
22
Dan Sinclaire7786682017-03-29 15:18:41 -040023#include "fxbarcode/common/BC_CommonBitMatrix.h"
24#include "fxbarcode/qrcode/BC_QRCoderBitVector.h"
25#include "fxbarcode/qrcode/BC_QRCoderECB.h"
26#include "fxbarcode/qrcode/BC_QRCoderECBlocks.h"
27#include "fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
28#include "fxbarcode/qrcode/BC_QRCoderVersion.h"
29#include "fxbarcode/utils.h"
Dan Sinclair1770c022016-03-14 14:14:16 -040030
31const int32_t CBC_QRCoderVersion::VERSION_DECODE_INFO[] = {
32 0x07C94, 0x085BC, 0x09A99, 0x0A4D3, 0x0BBF6, 0x0C762, 0x0D847,
33 0x0E60D, 0x0F928, 0x10B78, 0x1145D, 0x12A17, 0x13532, 0x149A6,
34 0x15683, 0x168C9, 0x177EC, 0x18EC4, 0x191E1, 0x1AFAB, 0x1B08E,
35 0x1CC1A, 0x1D33F, 0x1ED75, 0x1F250, 0x209D5, 0x216F0, 0x228BA,
36 0x2379F, 0x24B0B, 0x2542E, 0x26A64, 0x27541, 0x28C69};
tsepez6020e452016-05-02 13:47:17 -070037
Tom Sepez8b6186f2017-03-28 12:06:45 -070038std::vector<CBC_QRCoderVersion*>* CBC_QRCoderVersion::VERSION = nullptr;
Dan Sinclair1770c022016-03-14 14:14:16 -040039
40void CBC_QRCoderVersion::Initialize() {
Tom Sepez8b6186f2017-03-28 12:06:45 -070041 VERSION = new std::vector<CBC_QRCoderVersion*>();
Dan Sinclair1770c022016-03-14 14:14:16 -040042}
43void CBC_QRCoderVersion::Finalize() {
Tom Sepez8b6186f2017-03-28 12:06:45 -070044 for (size_t i = 0; i < VERSION->size(); i++)
45 delete (*VERSION)[i];
tsepez6020e452016-05-02 13:47:17 -070046
Dan Sinclair1770c022016-03-14 14:14:16 -040047 delete VERSION;
tsepez6020e452016-05-02 13:47:17 -070048 VERSION = nullptr;
Dan Sinclair1770c022016-03-14 14:14:16 -040049}
50CBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
51 CBC_QRCoderECBlocks* ecBlocks1,
52 CBC_QRCoderECBlocks* ecBlocks2,
53 CBC_QRCoderECBlocks* ecBlocks3,
54 CBC_QRCoderECBlocks* ecBlocks4) {
55 m_versionNumber = versionNumber;
Tom Sepez8b6186f2017-03-28 12:06:45 -070056 m_ecBlocksArray.push_back(ecBlocks1);
57 m_ecBlocksArray.push_back(ecBlocks2);
58 m_ecBlocksArray.push_back(ecBlocks3);
59 m_ecBlocksArray.push_back(ecBlocks4);
Dan Sinclair1770c022016-03-14 14:14:16 -040060 int32_t total = 0;
61 int32_t ecCodeWords = ecBlocks1->GetECCodeWordsPerBlock();
Tom Sepez8b6186f2017-03-28 12:06:45 -070062 std::vector<CBC_QRCoderECB*>* ecbArray = ecBlocks1->GetECBlocks();
63 for (size_t i = 0; i < ecbArray->size(); i++) {
tsepezaef780d2016-04-28 14:56:27 -070064 CBC_QRCoderECB* ecBlock = (*ecbArray)[i];
Dan Sinclair1770c022016-03-14 14:14:16 -040065 total += ecBlock->GetCount() * (ecBlock->GetDataCodeWords() + ecCodeWords);
66 }
67 m_totalCodeWords = total;
68 switch (versionNumber) {
69 case 1:
70 break;
71 case 2:
Tom Sepez8b6186f2017-03-28 12:06:45 -070072 m_alignmentPatternCenters.push_back(6);
73 m_alignmentPatternCenters.push_back(18);
Dan Sinclair1770c022016-03-14 14:14:16 -040074 break;
75 case 3:
Tom Sepez8b6186f2017-03-28 12:06:45 -070076 m_alignmentPatternCenters.push_back(6);
77 m_alignmentPatternCenters.push_back(22);
Dan Sinclair1770c022016-03-14 14:14:16 -040078 break;
79 case 4:
Tom Sepez8b6186f2017-03-28 12:06:45 -070080 m_alignmentPatternCenters.push_back(6);
81 m_alignmentPatternCenters.push_back(26);
Dan Sinclair1770c022016-03-14 14:14:16 -040082 break;
83 case 5:
Tom Sepez8b6186f2017-03-28 12:06:45 -070084 m_alignmentPatternCenters.push_back(6);
85 m_alignmentPatternCenters.push_back(30);
Dan Sinclair1770c022016-03-14 14:14:16 -040086 break;
87 case 6:
Tom Sepez8b6186f2017-03-28 12:06:45 -070088 m_alignmentPatternCenters.push_back(6);
89 m_alignmentPatternCenters.push_back(34);
Dan Sinclair1770c022016-03-14 14:14:16 -040090 break;
91 case 7:
Tom Sepez8b6186f2017-03-28 12:06:45 -070092 m_alignmentPatternCenters.push_back(6);
93 m_alignmentPatternCenters.push_back(22);
94 m_alignmentPatternCenters.push_back(38);
Dan Sinclair1770c022016-03-14 14:14:16 -040095 break;
96 case 8:
Tom Sepez8b6186f2017-03-28 12:06:45 -070097 m_alignmentPatternCenters.push_back(6);
98 m_alignmentPatternCenters.push_back(24);
99 m_alignmentPatternCenters.push_back(42);
Dan Sinclair1770c022016-03-14 14:14:16 -0400100 break;
101 case 9:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700102 m_alignmentPatternCenters.push_back(6);
103 m_alignmentPatternCenters.push_back(26);
104 m_alignmentPatternCenters.push_back(46);
Dan Sinclair1770c022016-03-14 14:14:16 -0400105 break;
106 case 10:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700107 m_alignmentPatternCenters.push_back(6);
108 m_alignmentPatternCenters.push_back(28);
109 m_alignmentPatternCenters.push_back(50);
Dan Sinclair1770c022016-03-14 14:14:16 -0400110 break;
111 case 11:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700112 m_alignmentPatternCenters.push_back(6);
113 m_alignmentPatternCenters.push_back(30);
114 m_alignmentPatternCenters.push_back(54);
Dan Sinclair1770c022016-03-14 14:14:16 -0400115 break;
116 case 12:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700117 m_alignmentPatternCenters.push_back(6);
118 m_alignmentPatternCenters.push_back(32);
119 m_alignmentPatternCenters.push_back(58);
Dan Sinclair1770c022016-03-14 14:14:16 -0400120 break;
121 case 13:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700122 m_alignmentPatternCenters.push_back(6);
123 m_alignmentPatternCenters.push_back(34);
124 m_alignmentPatternCenters.push_back(62);
Dan Sinclair1770c022016-03-14 14:14:16 -0400125 break;
126 case 14:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700127 m_alignmentPatternCenters.push_back(6);
128 m_alignmentPatternCenters.push_back(26);
129 m_alignmentPatternCenters.push_back(46);
130 m_alignmentPatternCenters.push_back(66);
Dan Sinclair1770c022016-03-14 14:14:16 -0400131 break;
132 case 15:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700133 m_alignmentPatternCenters.push_back(6);
134 m_alignmentPatternCenters.push_back(26);
135 m_alignmentPatternCenters.push_back(48);
136 m_alignmentPatternCenters.push_back(70);
Dan Sinclair1770c022016-03-14 14:14:16 -0400137 break;
138 case 16:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700139 m_alignmentPatternCenters.push_back(6);
140 m_alignmentPatternCenters.push_back(26);
141 m_alignmentPatternCenters.push_back(50);
142 m_alignmentPatternCenters.push_back(74);
Dan Sinclair1770c022016-03-14 14:14:16 -0400143 break;
144 case 17:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700145 m_alignmentPatternCenters.push_back(6);
146 m_alignmentPatternCenters.push_back(30);
147 m_alignmentPatternCenters.push_back(54);
148 m_alignmentPatternCenters.push_back(78);
Dan Sinclair1770c022016-03-14 14:14:16 -0400149 break;
150 case 18:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700151 m_alignmentPatternCenters.push_back(6);
152 m_alignmentPatternCenters.push_back(30);
153 m_alignmentPatternCenters.push_back(56);
154 m_alignmentPatternCenters.push_back(82);
Dan Sinclair1770c022016-03-14 14:14:16 -0400155 break;
156 case 19:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700157 m_alignmentPatternCenters.push_back(6);
158 m_alignmentPatternCenters.push_back(30);
159 m_alignmentPatternCenters.push_back(58);
160 m_alignmentPatternCenters.push_back(86);
Dan Sinclair1770c022016-03-14 14:14:16 -0400161 break;
162 case 20:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700163 m_alignmentPatternCenters.push_back(6);
164 m_alignmentPatternCenters.push_back(34);
165 m_alignmentPatternCenters.push_back(62);
166 m_alignmentPatternCenters.push_back(90);
Dan Sinclair1770c022016-03-14 14:14:16 -0400167 break;
168 case 21:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700169 m_alignmentPatternCenters.push_back(6);
170 m_alignmentPatternCenters.push_back(28);
171 m_alignmentPatternCenters.push_back(50);
172 m_alignmentPatternCenters.push_back(72);
173 m_alignmentPatternCenters.push_back(94);
Dan Sinclair1770c022016-03-14 14:14:16 -0400174 break;
175 case 22:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700176 m_alignmentPatternCenters.push_back(6);
177 m_alignmentPatternCenters.push_back(26);
178 m_alignmentPatternCenters.push_back(50);
179 m_alignmentPatternCenters.push_back(74);
180 m_alignmentPatternCenters.push_back(98);
Dan Sinclair1770c022016-03-14 14:14:16 -0400181 break;
182 case 23:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700183 m_alignmentPatternCenters.push_back(6);
184 m_alignmentPatternCenters.push_back(30);
185 m_alignmentPatternCenters.push_back(54);
186 m_alignmentPatternCenters.push_back(74);
187 m_alignmentPatternCenters.push_back(102);
Dan Sinclair1770c022016-03-14 14:14:16 -0400188 break;
189 case 24:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700190 m_alignmentPatternCenters.push_back(6);
191 m_alignmentPatternCenters.push_back(28);
192 m_alignmentPatternCenters.push_back(54);
193 m_alignmentPatternCenters.push_back(80);
194 m_alignmentPatternCenters.push_back(106);
Dan Sinclair1770c022016-03-14 14:14:16 -0400195 break;
196 case 25:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700197 m_alignmentPatternCenters.push_back(6);
198 m_alignmentPatternCenters.push_back(32);
199 m_alignmentPatternCenters.push_back(58);
200 m_alignmentPatternCenters.push_back(84);
201 m_alignmentPatternCenters.push_back(110);
Dan Sinclair1770c022016-03-14 14:14:16 -0400202 break;
203 case 26:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700204 m_alignmentPatternCenters.push_back(6);
205 m_alignmentPatternCenters.push_back(30);
206 m_alignmentPatternCenters.push_back(58);
207 m_alignmentPatternCenters.push_back(86);
208 m_alignmentPatternCenters.push_back(114);
Dan Sinclair1770c022016-03-14 14:14:16 -0400209 break;
210 case 27:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700211 m_alignmentPatternCenters.push_back(6);
212 m_alignmentPatternCenters.push_back(34);
213 m_alignmentPatternCenters.push_back(62);
214 m_alignmentPatternCenters.push_back(90);
215 m_alignmentPatternCenters.push_back(118);
Dan Sinclair1770c022016-03-14 14:14:16 -0400216 break;
217 case 28:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700218 m_alignmentPatternCenters.push_back(6);
219 m_alignmentPatternCenters.push_back(26);
220 m_alignmentPatternCenters.push_back(50);
221 m_alignmentPatternCenters.push_back(74);
222 m_alignmentPatternCenters.push_back(98);
223 m_alignmentPatternCenters.push_back(122);
Dan Sinclair1770c022016-03-14 14:14:16 -0400224 break;
225 case 29:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700226 m_alignmentPatternCenters.push_back(6);
227 m_alignmentPatternCenters.push_back(30);
228 m_alignmentPatternCenters.push_back(54);
229 m_alignmentPatternCenters.push_back(78);
230 m_alignmentPatternCenters.push_back(102);
231 m_alignmentPatternCenters.push_back(126);
Dan Sinclair1770c022016-03-14 14:14:16 -0400232 break;
233 case 30:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700234 m_alignmentPatternCenters.push_back(6);
235 m_alignmentPatternCenters.push_back(26);
236 m_alignmentPatternCenters.push_back(52);
237 m_alignmentPatternCenters.push_back(78);
238 m_alignmentPatternCenters.push_back(104);
239 m_alignmentPatternCenters.push_back(130);
Dan Sinclair1770c022016-03-14 14:14:16 -0400240 break;
241 case 31:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700242 m_alignmentPatternCenters.push_back(6);
243 m_alignmentPatternCenters.push_back(30);
244 m_alignmentPatternCenters.push_back(56);
245 m_alignmentPatternCenters.push_back(82);
246 m_alignmentPatternCenters.push_back(108);
247 m_alignmentPatternCenters.push_back(134);
Dan Sinclair1770c022016-03-14 14:14:16 -0400248 break;
249 case 32:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700250 m_alignmentPatternCenters.push_back(6);
251 m_alignmentPatternCenters.push_back(34);
252 m_alignmentPatternCenters.push_back(60);
253 m_alignmentPatternCenters.push_back(86);
254 m_alignmentPatternCenters.push_back(112);
255 m_alignmentPatternCenters.push_back(138);
Dan Sinclair1770c022016-03-14 14:14:16 -0400256 break;
257 case 33:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700258 m_alignmentPatternCenters.push_back(6);
259 m_alignmentPatternCenters.push_back(30);
260 m_alignmentPatternCenters.push_back(58);
261 m_alignmentPatternCenters.push_back(86);
262 m_alignmentPatternCenters.push_back(114);
263 m_alignmentPatternCenters.push_back(142);
Dan Sinclair1770c022016-03-14 14:14:16 -0400264 break;
265 case 34:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700266 m_alignmentPatternCenters.push_back(6);
267 m_alignmentPatternCenters.push_back(34);
268 m_alignmentPatternCenters.push_back(62);
269 m_alignmentPatternCenters.push_back(90);
270 m_alignmentPatternCenters.push_back(118);
271 m_alignmentPatternCenters.push_back(146);
Dan Sinclair1770c022016-03-14 14:14:16 -0400272 break;
273 case 35:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700274 m_alignmentPatternCenters.push_back(6);
275 m_alignmentPatternCenters.push_back(30);
276 m_alignmentPatternCenters.push_back(54);
277 m_alignmentPatternCenters.push_back(78);
278 m_alignmentPatternCenters.push_back(102);
279 m_alignmentPatternCenters.push_back(126);
280 m_alignmentPatternCenters.push_back(150);
Dan Sinclair1770c022016-03-14 14:14:16 -0400281 break;
282 case 36:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700283 m_alignmentPatternCenters.push_back(6);
284 m_alignmentPatternCenters.push_back(24);
285 m_alignmentPatternCenters.push_back(50);
286 m_alignmentPatternCenters.push_back(76);
287 m_alignmentPatternCenters.push_back(102);
288 m_alignmentPatternCenters.push_back(128);
289 m_alignmentPatternCenters.push_back(154);
Dan Sinclair1770c022016-03-14 14:14:16 -0400290 break;
291 case 37:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700292 m_alignmentPatternCenters.push_back(6);
293 m_alignmentPatternCenters.push_back(28);
294 m_alignmentPatternCenters.push_back(54);
295 m_alignmentPatternCenters.push_back(80);
296 m_alignmentPatternCenters.push_back(106);
297 m_alignmentPatternCenters.push_back(132);
298 m_alignmentPatternCenters.push_back(158);
Dan Sinclair1770c022016-03-14 14:14:16 -0400299 break;
300 case 38:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700301 m_alignmentPatternCenters.push_back(6);
302 m_alignmentPatternCenters.push_back(32);
303 m_alignmentPatternCenters.push_back(58);
304 m_alignmentPatternCenters.push_back(84);
305 m_alignmentPatternCenters.push_back(110);
306 m_alignmentPatternCenters.push_back(136);
307 m_alignmentPatternCenters.push_back(162);
Dan Sinclair1770c022016-03-14 14:14:16 -0400308 break;
309 case 39:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700310 m_alignmentPatternCenters.push_back(6);
311 m_alignmentPatternCenters.push_back(26);
312 m_alignmentPatternCenters.push_back(54);
313 m_alignmentPatternCenters.push_back(82);
314 m_alignmentPatternCenters.push_back(110);
315 m_alignmentPatternCenters.push_back(138);
316 m_alignmentPatternCenters.push_back(166);
Dan Sinclair1770c022016-03-14 14:14:16 -0400317 break;
318 case 40:
Tom Sepez8b6186f2017-03-28 12:06:45 -0700319 m_alignmentPatternCenters.push_back(6);
320 m_alignmentPatternCenters.push_back(30);
321 m_alignmentPatternCenters.push_back(58);
322 m_alignmentPatternCenters.push_back(86);
323 m_alignmentPatternCenters.push_back(114);
324 m_alignmentPatternCenters.push_back(142);
325 m_alignmentPatternCenters.push_back(170);
Dan Sinclair1770c022016-03-14 14:14:16 -0400326 break;
327 }
328}
tsepezaef780d2016-04-28 14:56:27 -0700329
Dan Sinclair1770c022016-03-14 14:14:16 -0400330CBC_QRCoderVersion::~CBC_QRCoderVersion() {
Tom Sepez8b6186f2017-03-28 12:06:45 -0700331 for (size_t i = 0; i < m_ecBlocksArray.size(); ++i)
tsepezaef780d2016-04-28 14:56:27 -0700332 delete m_ecBlocksArray[i];
Dan Sinclair1770c022016-03-14 14:14:16 -0400333}
tsepezaef780d2016-04-28 14:56:27 -0700334
Dan Sinclair1770c022016-03-14 14:14:16 -0400335int32_t CBC_QRCoderVersion::GetVersionNumber() {
336 return m_versionNumber;
337}
Tom Sepez8b6186f2017-03-28 12:06:45 -0700338std::vector<int32_t>* CBC_QRCoderVersion::GetAlignmentPatternCenters() {
Dan Sinclair1770c022016-03-14 14:14:16 -0400339 return &m_alignmentPatternCenters;
340}
341int32_t CBC_QRCoderVersion::GetTotalCodeWords() {
342 return m_totalCodeWords;
343}
344int32_t CBC_QRCoderVersion::GetDimensionForVersion() {
345 return 17 + 4 * m_versionNumber;
346}
347CBC_QRCoderECBlocks* CBC_QRCoderVersion::GetECBlocksForLevel(
348 CBC_QRCoderErrorCorrectionLevel* ecLevel) {
tsepezaef780d2016-04-28 14:56:27 -0700349 return m_ecBlocksArray[ecLevel->Ordinal()];
Dan Sinclair1770c022016-03-14 14:14:16 -0400350}
Lei Zhang1b228802017-04-05 18:42:22 -0700351
Dan Sinclair1770c022016-03-14 14:14:16 -0400352CBC_CommonBitMatrix* CBC_QRCoderVersion::BuildFunctionPattern(int32_t& e) {
353 int32_t dimension = GetDimensionForVersion();
354 CBC_CommonBitMatrix* bitMatrix = new CBC_CommonBitMatrix();
355 bitMatrix->Init(dimension);
Lei Zhang1b228802017-04-05 18:42:22 -0700356 if (!bitMatrix->SetRegion(0, 0, 9, 9))
Tom Sepezc8017b22017-01-31 13:02:10 -0800357 return nullptr;
Lei Zhang1b228802017-04-05 18:42:22 -0700358 if (!bitMatrix->SetRegion(dimension - 8, 0, 8, 9))
Tom Sepezc8017b22017-01-31 13:02:10 -0800359 return nullptr;
Lei Zhang1b228802017-04-05 18:42:22 -0700360 if (!bitMatrix->SetRegion(0, dimension - 8, 9, 8))
Tom Sepezc8017b22017-01-31 13:02:10 -0800361 return nullptr;
Tom Sepez8b6186f2017-03-28 12:06:45 -0700362 size_t max = m_alignmentPatternCenters.size();
363 for (size_t x = 0; x < max; x++) {
Dan Sinclair1770c022016-03-14 14:14:16 -0400364 int32_t i = m_alignmentPatternCenters[x] - 2;
Tom Sepez8b6186f2017-03-28 12:06:45 -0700365 for (size_t y = 0; y < max; y++) {
Dan Sinclair1770c022016-03-14 14:14:16 -0400366 if ((x == 0 && (y == 0 || y == max - 1)) || (x == max - 1 && y == 0)) {
367 continue;
368 }
Lei Zhang1b228802017-04-05 18:42:22 -0700369 if (!bitMatrix->SetRegion(m_alignmentPatternCenters[y] - 2, i, 5, 5))
Tom Sepezc8017b22017-01-31 13:02:10 -0800370 return nullptr;
Dan Sinclair1770c022016-03-14 14:14:16 -0400371 }
372 }
Lei Zhang1b228802017-04-05 18:42:22 -0700373 if (!bitMatrix->SetRegion(6, 9, 1, dimension - 17))
Tom Sepezc8017b22017-01-31 13:02:10 -0800374 return nullptr;
Lei Zhang1b228802017-04-05 18:42:22 -0700375 if (!bitMatrix->SetRegion(9, 6, dimension - 17, 1))
Tom Sepezc8017b22017-01-31 13:02:10 -0800376 return nullptr;
Dan Sinclair1770c022016-03-14 14:14:16 -0400377 if (m_versionNumber > 6) {
Lei Zhang1b228802017-04-05 18:42:22 -0700378 if (!bitMatrix->SetRegion(dimension - 11, 0, 3, 6))
Tom Sepezc8017b22017-01-31 13:02:10 -0800379 return nullptr;
Lei Zhang1b228802017-04-05 18:42:22 -0700380 if (!bitMatrix->SetRegion(0, dimension - 11, 6, 3))
Tom Sepezc8017b22017-01-31 13:02:10 -0800381 return nullptr;
Dan Sinclair1770c022016-03-14 14:14:16 -0400382 }
383 return bitMatrix;
384}
Lei Zhang1b228802017-04-05 18:42:22 -0700385
Dan Sinclair1770c022016-03-14 14:14:16 -0400386CBC_QRCoderVersion* CBC_QRCoderVersion::GetVersionForNumber(
Lei Zhang1b228802017-04-05 18:42:22 -0700387 int32_t versionNumber) {
Tom Sepez8b6186f2017-03-28 12:06:45 -0700388 if (VERSION->empty()) {
389 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400390 1, new CBC_QRCoderECBlocks(7, new CBC_QRCoderECB(1, 19)),
391 new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 16)),
392 new CBC_QRCoderECBlocks(13, new CBC_QRCoderECB(1, 13)),
393 new CBC_QRCoderECBlocks(17, new CBC_QRCoderECB(1, 9))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700394 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400395 2, new CBC_QRCoderECBlocks(10, new CBC_QRCoderECB(1, 34)),
396 new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(1, 28)),
397 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(1, 22)),
398 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700399 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400400 3, new CBC_QRCoderECBlocks(15, new CBC_QRCoderECB(1, 55)),
401 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 44)),
402 new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 17)),
403 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700404 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400405 4, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(1, 80)),
406 new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 32)),
407 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(2, 24)),
408 new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 9))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700409 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400410 5, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(1, 108)),
411 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 43)),
412 new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 15),
413 new CBC_QRCoderECB(2, 16)),
414 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 11),
415 new CBC_QRCoderECB(2, 12))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700416 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400417 6, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68)),
418 new CBC_QRCoderECBlocks(16, new CBC_QRCoderECB(4, 27)),
419 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 19)),
420 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 15))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700421 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400422 7, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(2, 78)),
423 new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(4, 31)),
424 new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 14),
425 new CBC_QRCoderECB(4, 15)),
426 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 13),
427 new CBC_QRCoderECB(1, 14))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700428 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400429 8, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 97)),
430 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(2, 38),
431 new CBC_QRCoderECB(2, 39)),
432 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(4, 18),
433 new CBC_QRCoderECB(2, 19)),
434 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 14),
435 new CBC_QRCoderECB(2, 15))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700436 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400437 9, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 116)),
438 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(3, 36),
439 new CBC_QRCoderECB(2, 37)),
440 new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 16),
441 new CBC_QRCoderECB(4, 17)),
442 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 12),
443 new CBC_QRCoderECB(4, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700444 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400445 10, new CBC_QRCoderECBlocks(18, new CBC_QRCoderECB(2, 68),
446 new CBC_QRCoderECB(2, 69)),
447 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 43),
448 new CBC_QRCoderECB(1, 44)),
449 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(6, 19),
450 new CBC_QRCoderECB(2, 20)),
451 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 15),
452 new CBC_QRCoderECB(2, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700453 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400454 11, new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(4, 81)),
455 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 50),
456 new CBC_QRCoderECB(4, 51)),
457 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 22),
458 new CBC_QRCoderECB(4, 23)),
459 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(3, 12),
460 new CBC_QRCoderECB(8, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700461 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400462 12, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(2, 92),
463 new CBC_QRCoderECB(2, 93)),
464 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(6, 36),
465 new CBC_QRCoderECB(2, 37)),
466 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 20),
467 new CBC_QRCoderECB(6, 21)),
468 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 14),
469 new CBC_QRCoderECB(4, 15))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700470 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400471 13, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(4, 107)),
472 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(8, 37),
473 new CBC_QRCoderECB(1, 38)),
474 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(8, 20),
475 new CBC_QRCoderECB(4, 21)),
476 new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(12, 11),
477 new CBC_QRCoderECB(4, 12))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700478 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400479 14, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 115),
480 new CBC_QRCoderECB(1, 116)),
481 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(4, 40),
482 new CBC_QRCoderECB(5, 41)),
483 new CBC_QRCoderECBlocks(20, new CBC_QRCoderECB(11, 16),
484 new CBC_QRCoderECB(5, 17)),
485 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
486 new CBC_QRCoderECB(5, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700487 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400488 15, new CBC_QRCoderECBlocks(22, new CBC_QRCoderECB(5, 87),
489 new CBC_QRCoderECB(1, 88)),
490 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 41),
491 new CBC_QRCoderECB(5, 42)),
492 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 24),
493 new CBC_QRCoderECB(7, 25)),
494 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(11, 12),
495 new CBC_QRCoderECB(7, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700496 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400497 16, new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(5, 98),
498 new CBC_QRCoderECB(1, 99)),
499 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(7, 45),
500 new CBC_QRCoderECB(3, 46)),
501 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(15, 19),
502 new CBC_QRCoderECB(2, 20)),
503 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 15),
504 new CBC_QRCoderECB(13, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700505 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400506 17, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 107),
507 new CBC_QRCoderECB(5, 108)),
508 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
509 new CBC_QRCoderECB(1, 47)),
510 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(1, 22),
511 new CBC_QRCoderECB(15, 23)),
512 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
513 new CBC_QRCoderECB(17, 15))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700514 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400515 18, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 120),
516 new CBC_QRCoderECB(1, 121)),
517 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 43),
518 new CBC_QRCoderECB(4, 44)),
519 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
520 new CBC_QRCoderECB(1, 23)),
521 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 14),
522 new CBC_QRCoderECB(19, 15))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700523 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400524 19, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 113),
525 new CBC_QRCoderECB(4, 114)),
526 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 44),
527 new CBC_QRCoderECB(11, 45)),
528 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 21),
529 new CBC_QRCoderECB(4, 22)),
530 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(9, 13),
531 new CBC_QRCoderECB(16, 14))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700532 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400533 20, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 107),
534 new CBC_QRCoderECB(5, 108)),
535 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(3, 41),
536 new CBC_QRCoderECB(13, 42)),
537 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
538 new CBC_QRCoderECB(5, 25)),
539 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(15, 15),
540 new CBC_QRCoderECB(10, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700541 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400542 21, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 116),
543 new CBC_QRCoderECB(4, 117)),
544 new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(17, 42)),
545 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 22),
546 new CBC_QRCoderECB(6, 23)),
547 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 16),
548 new CBC_QRCoderECB(6, 17))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700549 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400550 22, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 111),
551 new CBC_QRCoderECB(7, 112)),
552 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(17, 46)),
553 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
554 new CBC_QRCoderECB(16, 25)),
555 new CBC_QRCoderECBlocks(24, new CBC_QRCoderECB(34, 13))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700556 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400557 23, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 121),
558 new CBC_QRCoderECB(5, 122)),
559 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(4, 47),
560 new CBC_QRCoderECB(14, 48)),
561 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
562 new CBC_QRCoderECB(14, 25)),
563 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(16, 15),
564 new CBC_QRCoderECB(14, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700565 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400566 24, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 117),
567 new CBC_QRCoderECB(4, 118)),
568 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 45),
569 new CBC_QRCoderECB(14, 46)),
570 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 24),
571 new CBC_QRCoderECB(16, 25)),
572 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(30, 16),
573 new CBC_QRCoderECB(2, 17))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700574 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400575 25, new CBC_QRCoderECBlocks(26, new CBC_QRCoderECB(8, 106),
576 new CBC_QRCoderECB(4, 107)),
577 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(8, 47),
578 new CBC_QRCoderECB(13, 48)),
579 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 24),
580 new CBC_QRCoderECB(22, 25)),
581 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
582 new CBC_QRCoderECB(13, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700583 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400584 26, new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 114),
585 new CBC_QRCoderECB(2, 115)),
586 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 46),
587 new CBC_QRCoderECB(4, 47)),
588 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(28, 22),
589 new CBC_QRCoderECB(6, 23)),
590 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(33, 16),
591 new CBC_QRCoderECB(4, 17))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700592 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400593 27, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 122),
594 new CBC_QRCoderECB(4, 123)),
595 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(22, 45),
596 new CBC_QRCoderECB(3, 46)),
597 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(8, 23),
598 new CBC_QRCoderECB(26, 24)),
599 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 15),
600 new CBC_QRCoderECB(28, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700601 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400602 28, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(3, 117),
603 new CBC_QRCoderECB(10, 118)),
604 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(3, 45),
605 new CBC_QRCoderECB(23, 46)),
606 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 24),
607 new CBC_QRCoderECB(31, 25)),
608 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
609 new CBC_QRCoderECB(31, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700610 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400611 29, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(7, 116),
612 new CBC_QRCoderECB(7, 117)),
613 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(21, 45),
614 new CBC_QRCoderECB(7, 46)),
615 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(1, 23),
616 new CBC_QRCoderECB(37, 24)),
617 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
618 new CBC_QRCoderECB(26, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700619 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400620 30, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(5, 115),
621 new CBC_QRCoderECB(10, 116)),
622 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(19, 47),
623 new CBC_QRCoderECB(10, 48)),
624 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(15, 24),
625 new CBC_QRCoderECB(25, 25)),
626 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
627 new CBC_QRCoderECB(25, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700628 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400629 31, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
630 new CBC_QRCoderECB(3, 116)),
631 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(2, 46),
632 new CBC_QRCoderECB(29, 47)),
633 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 24),
634 new CBC_QRCoderECB(1, 25)),
635 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(23, 15),
636 new CBC_QRCoderECB(28, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700637 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400638 32, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115)),
639 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(10, 46),
640 new CBC_QRCoderECB(23, 47)),
641 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 24),
642 new CBC_QRCoderECB(35, 25)),
643 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 15),
644 new CBC_QRCoderECB(35, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700645 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400646 33, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 115),
647 new CBC_QRCoderECB(1, 116)),
648 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
649 new CBC_QRCoderECB(21, 47)),
650 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(29, 24),
651 new CBC_QRCoderECB(19, 25)),
652 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(11, 15),
653 new CBC_QRCoderECB(46, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700654 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400655 34, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(13, 115),
656 new CBC_QRCoderECB(6, 116)),
657 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(14, 46),
658 new CBC_QRCoderECB(23, 47)),
659 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(44, 24),
660 new CBC_QRCoderECB(7, 25)),
661 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(59, 16),
662 new CBC_QRCoderECB(1, 17))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700663 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400664 35, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(12, 121),
665 new CBC_QRCoderECB(7, 122)),
666 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(12, 47),
667 new CBC_QRCoderECB(26, 48)),
668 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(39, 24),
669 new CBC_QRCoderECB(14, 25)),
670 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(22, 15),
671 new CBC_QRCoderECB(41, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700672 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400673 36, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(6, 121),
674 new CBC_QRCoderECB(14, 122)),
675 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(6, 47),
676 new CBC_QRCoderECB(34, 48)),
677 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(46, 24),
678 new CBC_QRCoderECB(10, 25)),
679 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(2, 15),
680 new CBC_QRCoderECB(64, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700681 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400682 37, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(17, 122),
683 new CBC_QRCoderECB(4, 123)),
684 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(29, 46),
685 new CBC_QRCoderECB(14, 47)),
686 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(49, 24),
687 new CBC_QRCoderECB(10, 25)),
688 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(24, 15),
689 new CBC_QRCoderECB(46, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700690 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400691 38, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(4, 122),
692 new CBC_QRCoderECB(18, 123)),
693 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(13, 46),
694 new CBC_QRCoderECB(32, 47)),
695 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(48, 24),
696 new CBC_QRCoderECB(14, 25)),
697 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(42, 15),
698 new CBC_QRCoderECB(32, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700699 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400700 39, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 117),
701 new CBC_QRCoderECB(4, 118)),
702 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(40, 47),
703 new CBC_QRCoderECB(7, 48)),
704 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(43, 24),
705 new CBC_QRCoderECB(22, 25)),
706 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(10, 15),
707 new CBC_QRCoderECB(67, 16))));
Tom Sepez8b6186f2017-03-28 12:06:45 -0700708 VERSION->push_back(new CBC_QRCoderVersion(
Dan Sinclair1770c022016-03-14 14:14:16 -0400709 40, new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(19, 118),
710 new CBC_QRCoderECB(6, 119)),
711 new CBC_QRCoderECBlocks(28, new CBC_QRCoderECB(18, 47),
712 new CBC_QRCoderECB(31, 48)),
713 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(34, 24),
714 new CBC_QRCoderECB(34, 25)),
715 new CBC_QRCoderECBlocks(30, new CBC_QRCoderECB(20, 15),
716 new CBC_QRCoderECB(61, 16))));
717 }
Lei Zhang1b228802017-04-05 18:42:22 -0700718 if (versionNumber < 1 || versionNumber > 40)
Tom Sepez3c056ae2017-02-06 09:34:23 -0800719 return nullptr;
tsepez6020e452016-05-02 13:47:17 -0700720 return (*VERSION)[versionNumber - 1];
Dan Sinclair1770c022016-03-14 14:14:16 -0400721}
tsepez6020e452016-05-02 13:47:17 -0700722
Dan Sinclair1770c022016-03-14 14:14:16 -0400723void CBC_QRCoderVersion::Destroy() {
Tom Sepez8b6186f2017-03-28 12:06:45 -0700724 for (size_t i = 0; i < VERSION->size(); i++)
tsepez6020e452016-05-02 13:47:17 -0700725 delete (*VERSION)[i];
Tom Sepez8b6186f2017-03-28 12:06:45 -0700726 VERSION->clear();
Dan Sinclair1770c022016-03-14 14:14:16 -0400727}