Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(577)

Side by Side Diff: xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp

Issue 1941863002: Replace CFX_PtrArray with typesafe CFX_ArrayTemplate, part 11 (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Nits. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h ('k') | xfa/fxbarcode/qrcode/BC_QRCoderVersion.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 // Original code is licensed as follows: 6 // Original code is licensed as follows:
7 /* 7 /*
8 * Copyright 2008 ZXing authors 8 * Copyright 2008 ZXing authors
9 * 9 *
10 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * Licensed under the Apache License, Version 2.0 (the "License");
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 } else if (versionSpecify > 0 && versionSpecify <= 40) { 81 } else if (versionSpecify > 0 && versionSpecify <= 40) {
82 EncodeWithSpecifyVersion(content, ecLevel, qrCode, versionSpecify, e); 82 EncodeWithSpecifyVersion(content, ecLevel, qrCode, versionSpecify, e);
83 BC_EXCEPTION_CHECK_ReturnVoid(e); 83 BC_EXCEPTION_CHECK_ReturnVoid(e);
84 } else { 84 } else {
85 e = BCExceptionVersionMust1_40; 85 e = BCExceptionVersionMust1_40;
86 BC_EXCEPTION_CHECK_ReturnVoid(e); 86 BC_EXCEPTION_CHECK_ReturnVoid(e);
87 } 87 }
88 } 88 }
89 void CBC_QRCoderEncoder::AppendECI(CBC_QRCoderBitVector* bits) {} 89 void CBC_QRCoderEncoder::AppendECI(CBC_QRCoderBitVector* bits) {}
90 void CBC_QRCoderEncoder::AppendDataModeLenghInfo( 90 void CBC_QRCoderEncoder::AppendDataModeLenghInfo(
91 CFX_PtrArray& splitResult, 91 const CFX_ArrayTemplate<Make_Pair*>& splitResult,
92 CBC_QRCoderBitVector& headerAndDataBits, 92 CBC_QRCoderBitVector& headerAndDataBits,
93 CBC_QRCoderMode* tempMode, 93 CBC_QRCoderMode* tempMode,
94 CBC_QRCoder* qrCode, 94 CBC_QRCoder* qrCode,
95 CFX_ByteString& encoding, 95 CFX_ByteString& encoding,
96 int32_t& e) { 96 int32_t& e) {
97 for (int32_t i = 0; i < splitResult.GetSize(); i++) { 97 for (int32_t i = 0; i < splitResult.GetSize(); i++) {
98 tempMode = ((Make_Pair*)splitResult[i])->m_mode; 98 tempMode = ((Make_Pair*)splitResult[i])->m_mode;
99 if (tempMode == CBC_QRCoderMode::sGBK) { 99 if (tempMode == CBC_QRCoderMode::sGBK) {
100 AppendModeInfo(tempMode, &headerAndDataBits, e); 100 AppendModeInfo(tempMode, &headerAndDataBits, e);
101 BC_EXCEPTION_CHECK_ReturnVoid(e); 101 BC_EXCEPTION_CHECK_ReturnVoid(e);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 AppendBytes(((Make_Pair*)splitResult[i])->m_string, tempMode, 134 AppendBytes(((Make_Pair*)splitResult[i])->m_string, tempMode,
135 &headerAndDataBits, encoding, e); 135 &headerAndDataBits, encoding, e);
136 BC_EXCEPTION_CHECK_ReturnVoid(e); 136 BC_EXCEPTION_CHECK_ReturnVoid(e);
137 } else { 137 } else {
138 e = BCExceptionUnknown; 138 e = BCExceptionUnknown;
139 BC_EXCEPTION_CHECK_ReturnVoid(e); 139 BC_EXCEPTION_CHECK_ReturnVoid(e);
140 } 140 }
141 } 141 }
142 } 142 }
143 void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content, 143 void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
144 CFX_PtrArray& result) { 144 CFX_ArrayTemplate<Make_Pair*>* result) {
145 int32_t index = 0, flag = 0; 145 int32_t index = 0, flag = 0;
146 while ( 146 while (
147 (((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) || 147 (((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) ||
148 ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) && 148 ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) &&
149 (index < content.GetLength())) { 149 (index < content.GetLength())) {
150 index += 2; 150 index += 2;
151 } 151 }
152 if (index != flag) { 152 if (index != flag) {
153 result.Add( 153 result->Add(
154 new Make_Pair(CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag))); 154 new Make_Pair(CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag)));
155 } 155 }
156 flag = index; 156 flag = index;
157 if (index >= content.GetLength()) { 157 if (index >= content.GetLength()) {
158 return; 158 return;
159 } 159 }
160 while ( 160 while (
161 GetAlphaNumericCode((uint8_t)content[index]) == -1 && 161 GetAlphaNumericCode((uint8_t)content[index]) == -1 &&
162 !(((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) || 162 !(((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) ||
163 ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) && 163 ((uint8_t)content[index] >= 0xB0 && (uint8_t)content[index] <= 0xFA)) &&
164 (index < content.GetLength())) { 164 (index < content.GetLength())) {
165 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 165 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
166 if (IsDBCSLeadByte((uint8_t)content[index])) 166 if (IsDBCSLeadByte((uint8_t)content[index]))
167 #else 167 #else
168 if ((uint8_t)content[index] > 127) 168 if ((uint8_t)content[index] > 127)
169 #endif 169 #endif
170 { 170 {
171 index += 2; 171 index += 2;
172 } else { 172 } else {
173 index++; 173 index++;
174 } 174 }
175 } 175 }
176 if (index != flag) { 176 if (index != flag) {
177 result.Add( 177 result->Add(
178 new Make_Pair(CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag))); 178 new Make_Pair(CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag)));
179 } 179 }
180 flag = index; 180 flag = index;
181 if (index >= content.GetLength()) { 181 if (index >= content.GetLength()) {
182 return; 182 return;
183 } 183 }
184 while (FXSYS_Isdigit((uint8_t)content[index]) && 184 while (FXSYS_Isdigit((uint8_t)content[index]) &&
185 (index < content.GetLength())) { 185 (index < content.GetLength())) {
186 index++; 186 index++;
187 } 187 }
188 if (index != flag) { 188 if (index != flag) {
189 result.Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC, 189 result->Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC,
190 content.Mid(flag, index - flag))); 190 content.Mid(flag, index - flag)));
191 } 191 }
192 flag = index; 192 flag = index;
193 if (index >= content.GetLength()) { 193 if (index >= content.GetLength()) {
194 return; 194 return;
195 } 195 }
196 while (GetAlphaNumericCode((uint8_t)content[index]) != -1 && 196 while (GetAlphaNumericCode((uint8_t)content[index]) != -1 &&
197 (index < content.GetLength())) { 197 (index < content.GetLength())) {
198 index++; 198 index++;
199 } 199 }
200 if (index != flag) { 200 if (index != flag) {
201 result.Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC, 201 result->Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC,
202 content.Mid(flag, index - flag))); 202 content.Mid(flag, index - flag)));
203 } 203 }
204 flag = index; 204 flag = index;
205 if (index >= content.GetLength()) { 205 if (index < content.GetLength())
206 return; 206 SplitString(content.Mid(index, content.GetLength() - index), result);
207 }
208 SplitString(content.Mid(index, content.GetLength() - index), result);
209 } 207 }
208
210 int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst, 209 int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst,
211 CBC_QRCoderMode* modeSecond, 210 CBC_QRCoderMode* modeSecond,
212 int32_t versionNum, 211 int32_t versionNum,
213 int32_t& e) { 212 int32_t& e) {
214 if (versionNum == 0) { 213 if (versionNum == 0) {
215 return 0; 214 return 0;
216 } 215 }
217 if ((modeFirst == CBC_QRCoderMode::sALPHANUMERIC) && 216 if ((modeFirst == CBC_QRCoderMode::sALPHANUMERIC) &&
218 (modeSecond == CBC_QRCoderMode::sBYTE)) { 217 (modeSecond == CBC_QRCoderMode::sBYTE)) {
219 if (versionNum >= 1 && versionNum <= 9) { 218 if (versionNum >= 1 && versionNum <= 9) {
(...skipping 26 matching lines...) Expand all
246 return 8; 245 return 8;
247 } else if (versionNum >= 27 && versionNum <= 40) { 246 } else if (versionNum >= 27 && versionNum <= 40) {
248 return 9; 247 return 9;
249 } else { 248 } else {
250 e = BCExceptionNoSuchVersion; 249 e = BCExceptionNoSuchVersion;
251 BC_EXCEPTION_CHECK_ReturnValue(e, 0); 250 BC_EXCEPTION_CHECK_ReturnValue(e, 0);
252 } 251 }
253 } 252 }
254 return -1; 253 return -1;
255 } 254 }
256 void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result, 255
256 void CBC_QRCoderEncoder::MergeString(CFX_ArrayTemplate<Make_Pair*>* result,
257 int32_t versionNum, 257 int32_t versionNum,
258 int32_t& e) { 258 int32_t& e) {
259 Make_Pair* first = NULL; 259 Make_Pair* first = NULL;
260 Make_Pair* second = NULL; 260 Make_Pair* second = NULL;
261 size_t mergeNum = 0; 261 size_t mergeNum = 0;
262 int32_t i; 262 int32_t i;
263 for (i = 0; ((i < result.GetSize()) && (i + 1 < result.GetSize())); i++) { 263 for (i = 0; ((i < result->GetSize()) && (i + 1 < result->GetSize())); i++) {
264 first = (Make_Pair*)result[i]; 264 first = (*result)[i];
265 second = (Make_Pair*)result[i + 1]; 265 second = (*result)[i + 1];
266 if (first->m_mode == CBC_QRCoderMode::sALPHANUMERIC) { 266 if (first->m_mode == CBC_QRCoderMode::sALPHANUMERIC) {
267 int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sALPHANUMERIC, 267 int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sALPHANUMERIC,
268 CBC_QRCoderMode::sBYTE, versionNum, e); 268 CBC_QRCoderMode::sBYTE, versionNum, e);
269 BC_EXCEPTION_CHECK_ReturnVoid(e); 269 BC_EXCEPTION_CHECK_ReturnVoid(e);
270 if ((second->m_mode == CBC_QRCoderMode::sBYTE) && 270 if ((second->m_mode == CBC_QRCoderMode::sBYTE) &&
271 (first->m_string.GetLength() < tmp)) { 271 (first->m_string.GetLength() < tmp)) {
272 CFX_ByteString str = first->m_string + second->m_string; 272 CFX_ByteString str = first->m_string + second->m_string;
273 second->m_string = str; 273 second->m_string = str;
274 delete first; 274 delete first;
275 result.RemoveAt(i); 275 result->RemoveAt(i);
276 i--; 276 i--;
277 mergeNum++; 277 mergeNum++;
278 } 278 }
279 } else if (first->m_mode == CBC_QRCoderMode::sBYTE) { 279 } else if (first->m_mode == CBC_QRCoderMode::sBYTE) {
280 if (second->m_mode == CBC_QRCoderMode::sBYTE) { 280 if (second->m_mode == CBC_QRCoderMode::sBYTE) {
281 first->m_string += second->m_string; 281 first->m_string += second->m_string;
282 delete second; 282 delete second;
283 result.RemoveAt(i + 1); 283 result->RemoveAt(i + 1);
284 i--; 284 i--;
285 mergeNum++; 285 mergeNum++;
286 } 286 }
287 } else if (first->m_mode == CBC_QRCoderMode::sNUMERIC) { 287 } else if (first->m_mode == CBC_QRCoderMode::sNUMERIC) {
288 int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC, 288 int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC,
289 CBC_QRCoderMode::sBYTE, versionNum, e); 289 CBC_QRCoderMode::sBYTE, versionNum, e);
290 BC_EXCEPTION_CHECK_ReturnVoid(e); 290 BC_EXCEPTION_CHECK_ReturnVoid(e);
291 if ((second->m_mode == CBC_QRCoderMode::sBYTE) && 291 if ((second->m_mode == CBC_QRCoderMode::sBYTE) &&
292 (first->m_string.GetLength() < tmp)) { 292 (first->m_string.GetLength() < tmp)) {
293 CFX_ByteString str = first->m_string + second->m_string; 293 CFX_ByteString str = first->m_string + second->m_string;
294 second->m_string = str; 294 second->m_string = str;
295 delete first; 295 delete first;
296 result.RemoveAt(i); 296 result->RemoveAt(i);
297 i--; 297 i--;
298 mergeNum++; 298 mergeNum++;
299 } 299 }
300 tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC, 300 tmp = GetSpanByVersion(CBC_QRCoderMode::sNUMERIC,
301 CBC_QRCoderMode::sALPHANUMERIC, versionNum, e); 301 CBC_QRCoderMode::sALPHANUMERIC, versionNum, e);
302 BC_EXCEPTION_CHECK_ReturnVoid(e); 302 BC_EXCEPTION_CHECK_ReturnVoid(e);
303 if ((second->m_mode == CBC_QRCoderMode::sALPHANUMERIC) && 303 if ((second->m_mode == CBC_QRCoderMode::sALPHANUMERIC) &&
304 (first->m_string.GetLength() < tmp)) { 304 (first->m_string.GetLength() < tmp)) {
305 CFX_ByteString str = first->m_string + second->m_string; 305 CFX_ByteString str = first->m_string + second->m_string;
306 second->m_string = str; 306 second->m_string = str;
307 delete first; 307 delete first;
308 result.RemoveAt(i); 308 result->RemoveAt(i);
309 i--; 309 i--;
310 mergeNum++; 310 mergeNum++;
311 } 311 }
312 } 312 }
313 } 313 }
314 if (mergeNum == 0) { 314 if (mergeNum == 0) {
315 return; 315 return;
316 } 316 }
317 MergeString(result, versionNum, e); 317 MergeString(result, versionNum, e);
318 BC_EXCEPTION_CHECK_ReturnVoid(e); 318 BC_EXCEPTION_CHECK_ReturnVoid(e);
(...skipping 27 matching lines...) Expand all
346 BC_EXCEPTION_CHECK_ReturnVoid(e); 346 BC_EXCEPTION_CHECK_ReturnVoid(e);
347 } 347 }
348 void CBC_QRCoderEncoder::EncodeWithSpecifyVersion( 348 void CBC_QRCoderEncoder::EncodeWithSpecifyVersion(
349 const CFX_ByteString& content, 349 const CFX_ByteString& content,
350 CBC_QRCoderErrorCorrectionLevel* ecLevel, 350 CBC_QRCoderErrorCorrectionLevel* ecLevel,
351 CBC_QRCoder* qrCode, 351 CBC_QRCoder* qrCode,
352 int32_t versionSpecify, 352 int32_t versionSpecify,
353 int32_t& e) { 353 int32_t& e) {
354 CFX_ByteString encoding = "utf8"; 354 CFX_ByteString encoding = "utf8";
355 CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE; 355 CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
356 CFX_PtrArray splitResult; 356 CFX_ArrayTemplate<Make_Pair*> splitResult;
357 CBC_QRCoderBitVector dataBits; 357 CBC_QRCoderBitVector dataBits;
358 dataBits.Init(); 358 dataBits.Init();
359 SplitString(content, splitResult); 359 SplitString(content, &splitResult);
360 MergeString(splitResult, versionSpecify, e); 360 MergeString(&splitResult, versionSpecify, e);
361 BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderMode* tempMode = NULL; 361 BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderMode* tempMode = NULL;
362 for (int32_t i = 0; i < splitResult.GetSize(); i++) { 362 for (int32_t i = 0; i < splitResult.GetSize(); i++) {
363 AppendBytes(((Make_Pair*)splitResult[i])->m_string, 363 AppendBytes(splitResult[i]->m_string, splitResult[i]->m_mode, &dataBits,
364 ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e); 364 encoding, e);
365 if (e != BCExceptionNO) { 365 if (e != BCExceptionNO) {
366 for (int32_t y = 0; y < splitResult.GetSize(); y++) { 366 for (int32_t y = 0; y < splitResult.GetSize(); y++)
367 delete (Make_Pair*)splitResult[y]; 367 delete splitResult[y];
368 }
369 splitResult.RemoveAll();
370 return; 368 return;
371 } 369 }
372 } 370 }
373 int32_t numInputBytes = dataBits.sizeInBytes(); 371 int32_t numInputBytes = dataBits.sizeInBytes();
374 CBC_QRCoderBitVector headerAndDataBits; 372 CBC_QRCoderBitVector headerAndDataBits;
375 headerAndDataBits.Init(); 373 headerAndDataBits.Init();
376 InitQRCode(numInputBytes, versionSpecify, ecLevel, mode, qrCode, e); 374 InitQRCode(numInputBytes, versionSpecify, ecLevel, mode, qrCode, e);
377 if (e != BCExceptionNO) { 375 if (e != BCExceptionNO) {
378 for (int32_t k = 0; k < splitResult.GetSize(); k++) { 376 for (int32_t k = 0; k < splitResult.GetSize(); k++)
379 delete (Make_Pair*)splitResult[k]; 377 delete splitResult[k];
380 }
381 splitResult.RemoveAll();
382 return; 378 return;
383 } 379 }
384 AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode, 380 AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode,
385 encoding, e); 381 encoding, e);
386 if (e != BCExceptionNO) { 382 if (e != BCExceptionNO) {
387 for (int32_t k = 0; k < splitResult.GetSize(); k++) { 383 for (int32_t k = 0; k < splitResult.GetSize(); k++)
388 delete (Make_Pair*)splitResult[k]; 384 delete splitResult[k];
389 }
390 splitResult.RemoveAll();
391 return; 385 return;
392 } 386 }
393 numInputBytes = headerAndDataBits.sizeInBytes(); 387 numInputBytes = headerAndDataBits.sizeInBytes();
394 TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e); 388 TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e);
395 if (e != BCExceptionNO) { 389 for (int32_t j = 0; j < splitResult.GetSize(); j++) {
396 for (int32_t k = 0; k < splitResult.GetSize(); k++) { 390 delete splitResult[j];
397 delete (Make_Pair*)splitResult[k]; 391 }
398 } 392 if (e != BCExceptionNO)
399 splitResult.RemoveAll();
400 return; 393 return;
401 } 394
402 for (int32_t j = 0; j < splitResult.GetSize(); j++) {
403 delete (Make_Pair*)splitResult[j];
404 }
405 splitResult.RemoveAll();
406 CBC_QRCoderBitVector finalBits; 395 CBC_QRCoderBitVector finalBits;
407 finalBits.Init(); 396 finalBits.Init();
408 InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(), 397 InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
409 qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(), 398 qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(),
410 &finalBits, e); 399 &finalBits, e);
411 BC_EXCEPTION_CHECK_ReturnVoid(e); 400 BC_EXCEPTION_CHECK_ReturnVoid(e);
412 std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix( 401 std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix(
413 qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth())); 402 qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth()));
414 matrix->Init(); 403 matrix->Init();
415 int32_t maskPattern = ChooseMaskPattern( 404 int32_t maskPattern = ChooseMaskPattern(
(...skipping 10 matching lines...) Expand all
426 BC_EXCEPTION_CHECK_ReturnVoid(e); 415 BC_EXCEPTION_CHECK_ReturnVoid(e);
427 } 416 }
428 } 417 }
429 void CBC_QRCoderEncoder::EncodeWithAutoVersion( 418 void CBC_QRCoderEncoder::EncodeWithAutoVersion(
430 const CFX_ByteString& content, 419 const CFX_ByteString& content,
431 CBC_QRCoderErrorCorrectionLevel* ecLevel, 420 CBC_QRCoderErrorCorrectionLevel* ecLevel,
432 CBC_QRCoder* qrCode, 421 CBC_QRCoder* qrCode,
433 int32_t& e) { 422 int32_t& e) {
434 CFX_ByteString encoding = "utf8"; 423 CFX_ByteString encoding = "utf8";
435 CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE; 424 CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
436 CFX_PtrArray splitResult; 425 CFX_ArrayTemplate<Make_Pair*> splitResult;
437 CBC_QRCoderBitVector dataBits; 426 CBC_QRCoderBitVector dataBits;
438 dataBits.Init(); 427 dataBits.Init();
439 SplitString(content, splitResult); 428 SplitString(content, &splitResult);
440 MergeString(splitResult, 8, e); 429 MergeString(&splitResult, 8, e);
441 BC_EXCEPTION_CHECK_ReturnVoid(e); 430 BC_EXCEPTION_CHECK_ReturnVoid(e);
442 CBC_QRCoderMode* tempMode = NULL; 431 CBC_QRCoderMode* tempMode = NULL;
443 for (int32_t i = 0; i < splitResult.GetSize(); i++) { 432 for (int32_t i = 0; i < splitResult.GetSize(); i++) {
444 AppendBytes(((Make_Pair*)splitResult[i])->m_string, 433 AppendBytes(splitResult[i]->m_string, splitResult[i]->m_mode, &dataBits,
445 ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e); 434 encoding, e);
446 if (e != BCExceptionNO) { 435 if (e != BCExceptionNO) {
447 for (int32_t l = 0; l < splitResult.GetSize(); l++) { 436 for (int32_t l = 0; l < splitResult.GetSize(); l++)
448 delete (Make_Pair*)splitResult[l]; 437 delete splitResult[l];
449 }
450 splitResult.RemoveAll();
451 return; 438 return;
452 } 439 }
453 } 440 }
454 int32_t numInputBytes = dataBits.sizeInBytes(); 441 int32_t numInputBytes = dataBits.sizeInBytes();
455 InitQRCode(numInputBytes, ecLevel, mode, qrCode, e); 442 InitQRCode(numInputBytes, ecLevel, mode, qrCode, e);
456 BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderBitVector headerAndDataBits; 443 BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderBitVector headerAndDataBits;
457 headerAndDataBits.Init(); 444 headerAndDataBits.Init();
458 tempMode = NULL; 445 tempMode = NULL;
459 int32_t versionNum = qrCode->GetVersion(); 446 int32_t versionNum = qrCode->GetVersion();
460 sign: 447 sign:
(...skipping 14 matching lines...) Expand all
475 if (e1 != BCExceptionNO) { 462 if (e1 != BCExceptionNO) {
476 e = e1; 463 e = e1;
477 return; 464 return;
478 } 465 }
479 versionNum++; 466 versionNum++;
480 if (versionNum <= 40) { 467 if (versionNum <= 40) {
481 headerAndDataBits.Clear(); 468 headerAndDataBits.Clear();
482 e = BCExceptionNO; 469 e = BCExceptionNO;
483 goto sign; 470 goto sign;
484 } else { 471 } else {
485 for (int32_t j = 0; j < splitResult.GetSize(); j++) { 472 for (int32_t j = 0; j < splitResult.GetSize(); j++)
486 delete (Make_Pair*)splitResult[j]; 473 delete splitResult[j];
487 }
488 splitResult.RemoveAll();
489 return; 474 return;
490 } 475 }
491 } 476 }
492 for (int32_t k = 0; k < splitResult.GetSize(); k++) { 477 for (int32_t k = 0; k < splitResult.GetSize(); k++)
493 delete (Make_Pair*)splitResult[k]; 478 delete splitResult[k];
494 } 479
495 splitResult.RemoveAll();
496 CBC_QRCoderBitVector finalBits; 480 CBC_QRCoderBitVector finalBits;
497 finalBits.Init(); 481 finalBits.Init();
498 InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(), 482 InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
499 qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(), 483 qrCode->GetNumDataBytes(), qrCode->GetNumRSBlocks(),
500 &finalBits, e); 484 &finalBits, e);
501 BC_EXCEPTION_CHECK_ReturnVoid(e); 485 BC_EXCEPTION_CHECK_ReturnVoid(e);
502 std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix( 486 std::unique_ptr<CBC_CommonByteMatrix> matrix(new CBC_CommonByteMatrix(
503 qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth())); 487 qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth()));
504 matrix->Init(); 488 matrix->Init();
505 int32_t maskPattern = ChooseMaskPattern( 489 int32_t maskPattern = ChooseMaskPattern(
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 int32_t numRSBlocks, 840 int32_t numRSBlocks,
857 CBC_QRCoderBitVector* result, 841 CBC_QRCoderBitVector* result,
858 int32_t& e) { 842 int32_t& e) {
859 if (bits->sizeInBytes() != numDataBytes) { 843 if (bits->sizeInBytes() != numDataBytes) {
860 e = BCExceptionBitsBytesNotMatch; 844 e = BCExceptionBitsBytesNotMatch;
861 BC_EXCEPTION_CHECK_ReturnVoid(e); 845 BC_EXCEPTION_CHECK_ReturnVoid(e);
862 } 846 }
863 int32_t dataBytesOffset = 0; 847 int32_t dataBytesOffset = 0;
864 int32_t maxNumDataBytes = 0; 848 int32_t maxNumDataBytes = 0;
865 int32_t maxNumEcBytes = 0; 849 int32_t maxNumEcBytes = 0;
866 CFX_PtrArray blocks; 850 CFX_ArrayTemplate<CBC_QRCoderBlockPair*> blocks;
867 int32_t i; 851 int32_t i;
868 for (i = 0; i < numRSBlocks; i++) { 852 for (i = 0; i < numRSBlocks; i++) {
869 int32_t numDataBytesInBlock; 853 int32_t numDataBytesInBlock;
870 int32_t numEcBytesInBlosk; 854 int32_t numEcBytesInBlosk;
871 GetNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes, 855 GetNumDataBytesAndNumECBytesForBlockID(numTotalBytes, numDataBytes,
872 numRSBlocks, i, numDataBytesInBlock, 856 numRSBlocks, i, numDataBytesInBlock,
873 numEcBytesInBlosk); 857 numEcBytesInBlosk);
874 CBC_CommonByteArray* dataBytes = new CBC_CommonByteArray; 858 CBC_CommonByteArray* dataBytes = new CBC_CommonByteArray;
875 dataBytes->Set(bits->GetArray(), dataBytesOffset, numDataBytesInBlock); 859 dataBytes->Set(bits->GetArray(), dataBytesOffset, numDataBytesInBlock);
876 CBC_CommonByteArray* ecBytes = 860 CBC_CommonByteArray* ecBytes =
877 GenerateECBytes(dataBytes, numEcBytesInBlosk, e); 861 GenerateECBytes(dataBytes, numEcBytesInBlosk, e);
878 BC_EXCEPTION_CHECK_ReturnVoid(e); 862 BC_EXCEPTION_CHECK_ReturnVoid(e);
879 blocks.Add(new CBC_QRCoderBlockPair(dataBytes, ecBytes)); 863 blocks.Add(new CBC_QRCoderBlockPair(dataBytes, ecBytes));
880 maxNumDataBytes = std::max(maxNumDataBytes, dataBytes->Size()); 864 maxNumDataBytes = std::max(maxNumDataBytes, dataBytes->Size());
881 maxNumEcBytes = std::max(maxNumEcBytes, ecBytes->Size()); 865 maxNumEcBytes = std::max(maxNumEcBytes, ecBytes->Size());
882 dataBytesOffset += numDataBytesInBlock; 866 dataBytesOffset += numDataBytesInBlock;
883 } 867 }
884 if (numDataBytes != dataBytesOffset) { 868 if (numDataBytes != dataBytesOffset) {
885 e = BCExceptionBytesNotMatchOffset; 869 e = BCExceptionBytesNotMatchOffset;
886 BC_EXCEPTION_CHECK_ReturnVoid(e); 870 BC_EXCEPTION_CHECK_ReturnVoid(e);
887 } 871 }
888 for (int32_t x = 0; x < maxNumDataBytes; x++) { 872 for (int32_t x = 0; x < maxNumDataBytes; x++) {
889 for (int32_t j = 0; j < blocks.GetSize(); j++) { 873 for (int32_t j = 0; j < blocks.GetSize(); j++) {
890 CBC_CommonByteArray* dataBytes = 874 CBC_CommonByteArray* dataBytes = blocks[j]->GetDataBytes();
891 ((CBC_QRCoderBlockPair*)blocks[j])->GetDataBytes();
892 if (x < dataBytes->Size()) { 875 if (x < dataBytes->Size()) {
893 result->AppendBits(dataBytes->At(x), 8, e); 876 result->AppendBits(dataBytes->At(x), 8, e);
894 BC_EXCEPTION_CHECK_ReturnVoid(e); 877 BC_EXCEPTION_CHECK_ReturnVoid(e);
895 } 878 }
896 } 879 }
897 } 880 }
898 for (int32_t y = 0; y < maxNumEcBytes; y++) { 881 for (int32_t y = 0; y < maxNumEcBytes; y++) {
899 for (int32_t l = 0; l < blocks.GetSize(); l++) { 882 for (int32_t l = 0; l < blocks.GetSize(); l++) {
900 CBC_CommonByteArray* ecBytes = 883 CBC_CommonByteArray* ecBytes = blocks[l]->GetErrorCorrectionBytes();
901 ((CBC_QRCoderBlockPair*)blocks[l])->GetErrorCorrectionBytes();
902 if (y < ecBytes->Size()) { 884 if (y < ecBytes->Size()) {
903 result->AppendBits(ecBytes->At(y), 8, e); 885 result->AppendBits(ecBytes->At(y), 8, e);
904 BC_EXCEPTION_CHECK_ReturnVoid(e); 886 BC_EXCEPTION_CHECK_ReturnVoid(e);
905 } 887 }
906 } 888 }
907 } 889 }
908 for (int32_t k = 0; k < blocks.GetSize(); k++) { 890 for (int32_t k = 0; k < blocks.GetSize(); k++) {
909 delete (CBC_QRCoderBlockPair*)blocks[k]; 891 delete blocks[k];
910 } 892 }
911 if (numTotalBytes != result->sizeInBytes()) { 893 if (numTotalBytes != result->sizeInBytes()) {
912 e = BCExceptionSizeInBytesDiffer; 894 e = BCExceptionSizeInBytesDiffer;
913 BC_EXCEPTION_CHECK_ReturnVoid(e); 895 BC_EXCEPTION_CHECK_ReturnVoid(e);
914 } 896 }
915 } 897 }
916 void CBC_QRCoderEncoder::GetNumDataBytesAndNumECBytesForBlockID( 898 void CBC_QRCoderEncoder::GetNumDataBytesAndNumECBytesForBlockID(
917 int32_t numTotalBytes, 899 int32_t numTotalBytes,
918 int32_t numDataBytes, 900 int32_t numDataBytes,
919 int32_t numRSBlocks, 901 int32_t numRSBlocks,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeFild); 934 CBC_ReedSolomonEncoder encode(CBC_ReedSolomonGF256::QRCodeFild);
953 encode.Init(); 935 encode.Init();
954 encode.Encode(&toEncode, numEcBytesInBlock, e); 936 encode.Encode(&toEncode, numEcBytesInBlock, e);
955 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); 937 BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
956 CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock); 938 CBC_CommonByteArray* ecBytes = new CBC_CommonByteArray(numEcBytesInBlock);
957 for (int32_t j = 0; j < numEcBytesInBlock; j++) { 939 for (int32_t j = 0; j < numEcBytesInBlock; j++) {
958 ecBytes->Set(j, toEncode[numDataBytes + j]); 940 ecBytes->Set(j, toEncode[numDataBytes + j]);
959 } 941 }
960 return ecBytes; 942 return ecBytes;
961 } 943 }
OLDNEW
« no previous file with comments | « xfa/fxbarcode/qrcode/BC_QRCoderEncoder.h ('k') | xfa/fxbarcode/qrcode/BC_QRCoderVersion.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698