summaryrefslogtreecommitdiff
path: root/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp')
-rw-r--r--xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp120
1 files changed, 51 insertions, 69 deletions
diff --git a/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/xfa/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index ded0df694b..eb7642649d 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;