| Index: xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
|
| diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
|
| index ded0df694b5627ab70da6a319ef504f89001c20a..eb7642649d3c818c87b8224176b0c84aa84bbf20 100644
|
| --- a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
|
| +++ b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
|
| @@ -88,7 +88,7 @@ void CBC_QRCoderEncoder::Encode(const CFX_ByteString& content,
|
| }
|
| void CBC_QRCoderEncoder::AppendECI(CBC_QRCoderBitVector* bits) {}
|
| void CBC_QRCoderEncoder::AppendDataModeLenghInfo(
|
| - CFX_PtrArray& splitResult,
|
| + const CFX_ArrayTemplate<Make_Pair*>& splitResult,
|
| CBC_QRCoderBitVector& headerAndDataBits,
|
| CBC_QRCoderMode* tempMode,
|
| CBC_QRCoder* qrCode,
|
| @@ -141,7 +141,7 @@ void CBC_QRCoderEncoder::AppendDataModeLenghInfo(
|
| }
|
| }
|
| void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
|
| - CFX_PtrArray& result) {
|
| + CFX_ArrayTemplate<Make_Pair*>* result) {
|
| int32_t index = 0, flag = 0;
|
| while (
|
| (((uint8_t)content[index] >= 0xA1 && (uint8_t)content[index] <= 0xAA) ||
|
| @@ -150,7 +150,7 @@ void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
|
| index += 2;
|
| }
|
| if (index != flag) {
|
| - result.Add(
|
| + result->Add(
|
| new Make_Pair(CBC_QRCoderMode::sGBK, content.Mid(flag, index - flag)));
|
| }
|
| flag = index;
|
| @@ -174,7 +174,7 @@ void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
|
| }
|
| }
|
| if (index != flag) {
|
| - result.Add(
|
| + result->Add(
|
| new Make_Pair(CBC_QRCoderMode::sBYTE, content.Mid(flag, index - flag)));
|
| }
|
| flag = index;
|
| @@ -186,8 +186,8 @@ void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
|
| index++;
|
| }
|
| if (index != flag) {
|
| - result.Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC,
|
| - content.Mid(flag, index - flag)));
|
| + result->Add(new Make_Pair(CBC_QRCoderMode::sNUMERIC,
|
| + content.Mid(flag, index - flag)));
|
| }
|
| flag = index;
|
| if (index >= content.GetLength()) {
|
| @@ -198,15 +198,14 @@ void CBC_QRCoderEncoder::SplitString(const CFX_ByteString& content,
|
| index++;
|
| }
|
| if (index != flag) {
|
| - result.Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC,
|
| - content.Mid(flag, index - flag)));
|
| + result->Add(new Make_Pair(CBC_QRCoderMode::sALPHANUMERIC,
|
| + content.Mid(flag, index - flag)));
|
| }
|
| flag = index;
|
| - if (index >= content.GetLength()) {
|
| - return;
|
| - }
|
| - SplitString(content.Mid(index, content.GetLength() - index), result);
|
| + if (index < content.GetLength())
|
| + SplitString(content.Mid(index, content.GetLength() - index), result);
|
| }
|
| +
|
| int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst,
|
| CBC_QRCoderMode* modeSecond,
|
| int32_t versionNum,
|
| @@ -253,16 +252,17 @@ int32_t CBC_QRCoderEncoder::GetSpanByVersion(CBC_QRCoderMode* modeFirst,
|
| }
|
| return -1;
|
| }
|
| -void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result,
|
| +
|
| +void CBC_QRCoderEncoder::MergeString(CFX_ArrayTemplate<Make_Pair*>* result,
|
| int32_t versionNum,
|
| int32_t& e) {
|
| Make_Pair* first = NULL;
|
| Make_Pair* second = NULL;
|
| size_t mergeNum = 0;
|
| int32_t i;
|
| - for (i = 0; ((i < result.GetSize()) && (i + 1 < result.GetSize())); i++) {
|
| - first = (Make_Pair*)result[i];
|
| - second = (Make_Pair*)result[i + 1];
|
| + for (i = 0; ((i < result->GetSize()) && (i + 1 < result->GetSize())); i++) {
|
| + first = (*result)[i];
|
| + second = (*result)[i + 1];
|
| if (first->m_mode == CBC_QRCoderMode::sALPHANUMERIC) {
|
| int32_t tmp = GetSpanByVersion(CBC_QRCoderMode::sALPHANUMERIC,
|
| CBC_QRCoderMode::sBYTE, versionNum, e);
|
| @@ -272,7 +272,7 @@ void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result,
|
| CFX_ByteString str = first->m_string + second->m_string;
|
| second->m_string = str;
|
| delete first;
|
| - result.RemoveAt(i);
|
| + result->RemoveAt(i);
|
| i--;
|
| mergeNum++;
|
| }
|
| @@ -280,7 +280,7 @@ void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result,
|
| if (second->m_mode == CBC_QRCoderMode::sBYTE) {
|
| first->m_string += second->m_string;
|
| delete second;
|
| - result.RemoveAt(i + 1);
|
| + result->RemoveAt(i + 1);
|
| i--;
|
| mergeNum++;
|
| }
|
| @@ -293,7 +293,7 @@ void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result,
|
| CFX_ByteString str = first->m_string + second->m_string;
|
| second->m_string = str;
|
| delete first;
|
| - result.RemoveAt(i);
|
| + result->RemoveAt(i);
|
| i--;
|
| mergeNum++;
|
| }
|
| @@ -305,7 +305,7 @@ void CBC_QRCoderEncoder::MergeString(CFX_PtrArray& result,
|
| CFX_ByteString str = first->m_string + second->m_string;
|
| second->m_string = str;
|
| delete first;
|
| - result.RemoveAt(i);
|
| + result->RemoveAt(i);
|
| i--;
|
| mergeNum++;
|
| }
|
| @@ -353,20 +353,18 @@ void CBC_QRCoderEncoder::EncodeWithSpecifyVersion(
|
| int32_t& e) {
|
| CFX_ByteString encoding = "utf8";
|
| CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
|
| - CFX_PtrArray splitResult;
|
| + CFX_ArrayTemplate<Make_Pair*> splitResult;
|
| CBC_QRCoderBitVector dataBits;
|
| dataBits.Init();
|
| - SplitString(content, splitResult);
|
| - MergeString(splitResult, versionSpecify, e);
|
| + SplitString(content, &splitResult);
|
| + MergeString(&splitResult, versionSpecify, e);
|
| BC_EXCEPTION_CHECK_ReturnVoid(e) CBC_QRCoderMode* tempMode = NULL;
|
| for (int32_t i = 0; i < splitResult.GetSize(); i++) {
|
| - AppendBytes(((Make_Pair*)splitResult[i])->m_string,
|
| - ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e);
|
| + AppendBytes(splitResult[i]->m_string, splitResult[i]->m_mode, &dataBits,
|
| + encoding, e);
|
| if (e != BCExceptionNO) {
|
| - for (int32_t y = 0; y < splitResult.GetSize(); y++) {
|
| - delete (Make_Pair*)splitResult[y];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t y = 0; y < splitResult.GetSize(); y++)
|
| + delete splitResult[y];
|
| return;
|
| }
|
| }
|
| @@ -375,34 +373,25 @@ void CBC_QRCoderEncoder::EncodeWithSpecifyVersion(
|
| headerAndDataBits.Init();
|
| InitQRCode(numInputBytes, versionSpecify, ecLevel, mode, qrCode, e);
|
| if (e != BCExceptionNO) {
|
| - for (int32_t k = 0; k < splitResult.GetSize(); k++) {
|
| - delete (Make_Pair*)splitResult[k];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t k = 0; k < splitResult.GetSize(); k++)
|
| + delete splitResult[k];
|
| return;
|
| }
|
| AppendDataModeLenghInfo(splitResult, headerAndDataBits, tempMode, qrCode,
|
| encoding, e);
|
| if (e != BCExceptionNO) {
|
| - for (int32_t k = 0; k < splitResult.GetSize(); k++) {
|
| - delete (Make_Pair*)splitResult[k];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t k = 0; k < splitResult.GetSize(); k++)
|
| + delete splitResult[k];
|
| return;
|
| }
|
| numInputBytes = headerAndDataBits.sizeInBytes();
|
| TerminateBits(qrCode->GetNumDataBytes(), &headerAndDataBits, e);
|
| - if (e != BCExceptionNO) {
|
| - for (int32_t k = 0; k < splitResult.GetSize(); k++) {
|
| - delete (Make_Pair*)splitResult[k];
|
| - }
|
| - splitResult.RemoveAll();
|
| - return;
|
| - }
|
| for (int32_t j = 0; j < splitResult.GetSize(); j++) {
|
| - delete (Make_Pair*)splitResult[j];
|
| + delete splitResult[j];
|
| }
|
| - splitResult.RemoveAll();
|
| + if (e != BCExceptionNO)
|
| + return;
|
| +
|
| CBC_QRCoderBitVector finalBits;
|
| finalBits.Init();
|
| InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
|
| @@ -433,21 +422,19 @@ void CBC_QRCoderEncoder::EncodeWithAutoVersion(
|
| int32_t& e) {
|
| CFX_ByteString encoding = "utf8";
|
| CBC_QRCoderMode* mode = CBC_QRCoderMode::sBYTE;
|
| - CFX_PtrArray splitResult;
|
| + CFX_ArrayTemplate<Make_Pair*> splitResult;
|
| CBC_QRCoderBitVector dataBits;
|
| dataBits.Init();
|
| - SplitString(content, splitResult);
|
| - MergeString(splitResult, 8, e);
|
| + SplitString(content, &splitResult);
|
| + MergeString(&splitResult, 8, e);
|
| BC_EXCEPTION_CHECK_ReturnVoid(e);
|
| CBC_QRCoderMode* tempMode = NULL;
|
| for (int32_t i = 0; i < splitResult.GetSize(); i++) {
|
| - AppendBytes(((Make_Pair*)splitResult[i])->m_string,
|
| - ((Make_Pair*)splitResult[i])->m_mode, &dataBits, encoding, e);
|
| + AppendBytes(splitResult[i]->m_string, splitResult[i]->m_mode, &dataBits,
|
| + encoding, e);
|
| if (e != BCExceptionNO) {
|
| - for (int32_t l = 0; l < splitResult.GetSize(); l++) {
|
| - delete (Make_Pair*)splitResult[l];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t l = 0; l < splitResult.GetSize(); l++)
|
| + delete splitResult[l];
|
| return;
|
| }
|
| }
|
| @@ -482,17 +469,14 @@ catchException:
|
| e = BCExceptionNO;
|
| goto sign;
|
| } else {
|
| - for (int32_t j = 0; j < splitResult.GetSize(); j++) {
|
| - delete (Make_Pair*)splitResult[j];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t j = 0; j < splitResult.GetSize(); j++)
|
| + delete splitResult[j];
|
| return;
|
| }
|
| }
|
| - for (int32_t k = 0; k < splitResult.GetSize(); k++) {
|
| - delete (Make_Pair*)splitResult[k];
|
| - }
|
| - splitResult.RemoveAll();
|
| + for (int32_t k = 0; k < splitResult.GetSize(); k++)
|
| + delete splitResult[k];
|
| +
|
| CBC_QRCoderBitVector finalBits;
|
| finalBits.Init();
|
| InterleaveWithECBytes(&headerAndDataBits, qrCode->GetNumTotalBytes(),
|
| @@ -863,7 +847,7 @@ void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
|
| int32_t dataBytesOffset = 0;
|
| int32_t maxNumDataBytes = 0;
|
| int32_t maxNumEcBytes = 0;
|
| - CFX_PtrArray blocks;
|
| + CFX_ArrayTemplate<CBC_QRCoderBlockPair*> blocks;
|
| int32_t i;
|
| for (i = 0; i < numRSBlocks; i++) {
|
| int32_t numDataBytesInBlock;
|
| @@ -887,8 +871,7 @@ void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
|
| }
|
| for (int32_t x = 0; x < maxNumDataBytes; x++) {
|
| for (int32_t j = 0; j < blocks.GetSize(); j++) {
|
| - CBC_CommonByteArray* dataBytes =
|
| - ((CBC_QRCoderBlockPair*)blocks[j])->GetDataBytes();
|
| + CBC_CommonByteArray* dataBytes = blocks[j]->GetDataBytes();
|
| if (x < dataBytes->Size()) {
|
| result->AppendBits(dataBytes->At(x), 8, e);
|
| BC_EXCEPTION_CHECK_ReturnVoid(e);
|
| @@ -897,8 +880,7 @@ void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
|
| }
|
| for (int32_t y = 0; y < maxNumEcBytes; y++) {
|
| for (int32_t l = 0; l < blocks.GetSize(); l++) {
|
| - CBC_CommonByteArray* ecBytes =
|
| - ((CBC_QRCoderBlockPair*)blocks[l])->GetErrorCorrectionBytes();
|
| + CBC_CommonByteArray* ecBytes = blocks[l]->GetErrorCorrectionBytes();
|
| if (y < ecBytes->Size()) {
|
| result->AppendBits(ecBytes->At(y), 8, e);
|
| BC_EXCEPTION_CHECK_ReturnVoid(e);
|
| @@ -906,7 +888,7 @@ void CBC_QRCoderEncoder::InterleaveWithECBytes(CBC_QRCoderBitVector* bits,
|
| }
|
| }
|
| for (int32_t k = 0; k < blocks.GetSize(); k++) {
|
| - delete (CBC_QRCoderBlockPair*)blocks[k];
|
| + delete blocks[k];
|
| }
|
| if (numTotalBytes != result->sizeInBytes()) {
|
| e = BCExceptionSizeInBytesDiffer;
|
|
|