summaryrefslogtreecommitdiff
path: root/fxbarcode/datamatrix/BC_C40Encoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fxbarcode/datamatrix/BC_C40Encoder.cpp')
-rw-r--r--fxbarcode/datamatrix/BC_C40Encoder.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.cpp b/fxbarcode/datamatrix/BC_C40Encoder.cpp
index e8aa679e28..8d352b1a98 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_C40Encoder.cpp
@@ -67,21 +67,20 @@ void CBC_C40Encoder::Encode(CBC_EncoderContext& context, int32_t& e) {
}
int32_t available = context.m_symbolInfo->m_dataCapacity - curCodewordCount;
if (!context.hasMoreCharacters()) {
- CFX_WideString removed;
if ((buffer.GetLength() % 3) == 2) {
if (available < 2 || available > 2) {
- lastCharSize =
- backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
- if (e != BCExceptionNO) {
+ lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+ if (lastCharSize < 0) {
+ e = BCExceptionGeneric;
return;
}
}
}
while ((buffer.GetLength() % 3) == 1 &&
((lastCharSize <= 3 && available != 1) || lastCharSize > 3)) {
- lastCharSize =
- backtrackOneCharacter(context, buffer, removed, lastCharSize, e);
- if (e != BCExceptionNO) {
+ lastCharSize = BacktrackOneCharacter(&context, &buffer, lastCharSize);
+ if (lastCharSize < 0) {
+ e = BCExceptionGeneric;
return;
}
}
@@ -187,18 +186,21 @@ int32_t CBC_C40Encoder::encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) {
return 0;
}
}
-int32_t CBC_C40Encoder::backtrackOneCharacter(CBC_EncoderContext& context,
- CFX_WideString& buffer,
- CFX_WideString& removed,
- int32_t lastCharSize,
- int32_t& e) {
- int32_t count = buffer.GetLength();
- buffer.Delete(count - lastCharSize, count);
- context.m_pos--;
- wchar_t c = context.getCurrentChar();
- lastCharSize = encodeChar(c, removed, e);
+
+int32_t CBC_C40Encoder::BacktrackOneCharacter(CBC_EncoderContext* context,
+ CFX_WideString* buffer,
+ int32_t lastCharSize) {
+ int32_t count = buffer->GetLength();
+ buffer->Delete(count - lastCharSize, count);
+ context->m_pos--;
+ wchar_t c = context->getCurrentChar();
+ int32_t e = BCExceptionNO;
+ CFX_WideString removed;
+ int32_t len = encodeChar(c, removed, e);
if (e != BCExceptionNO)
return -1;
- context.resetSymbolInfo();
- return lastCharSize;
+
+ assert(len > 0);
+ context->resetSymbolInfo();
+ return len;
}