Clean up CBC_HighLevelEncoder.
- Delete unused code and member.
- Delete the ctor and dtor.
- Move private static code into anonymous namespace.
- Fix some function / constant naming.
Change-Id: Ic90477a4d7653ce0081c5ad7dc6b89464f543e3e
Reviewed-on: https://pdfium-review.googlesource.com/c/46690
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index 358624f..1c43c68 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -39,30 +39,74 @@
#include "fxbarcode/datamatrix/BC_X12Encoder.h"
#include "third_party/base/ptr_util.h"
-const wchar_t CBC_HighLevelEncoder::LATCH_TO_C40 = 230;
-const wchar_t CBC_HighLevelEncoder::LATCH_TO_BASE256 = 231;
-const wchar_t CBC_HighLevelEncoder::UPPER_SHIFT = 235;
-const wchar_t CBC_HighLevelEncoder::LATCH_TO_ANSIX12 = 238;
-const wchar_t CBC_HighLevelEncoder::LATCH_TO_TEXT = 239;
-const wchar_t CBC_HighLevelEncoder::LATCH_TO_EDIFACT = 240;
-const wchar_t CBC_HighLevelEncoder::C40_UNLATCH = 254;
-const wchar_t CBC_HighLevelEncoder::X12_UNLATCH = 254;
-const wchar_t CBC_HighLevelEncoder::PAD = 129;
-const wchar_t CBC_HighLevelEncoder::MACRO_05 = 236;
-const wchar_t CBC_HighLevelEncoder::MACRO_06 = 237;
-const wchar_t CBC_HighLevelEncoder::MACRO_05_HEADER[] = L"[)>05";
-const wchar_t CBC_HighLevelEncoder::MACRO_06_HEADER[] = L"[)>06";
-const wchar_t CBC_HighLevelEncoder::MACRO_TRAILER = 0x0004;
+namespace {
-CBC_HighLevelEncoder::CBC_HighLevelEncoder() {}
-CBC_HighLevelEncoder::~CBC_HighLevelEncoder() {}
+const wchar_t kPad = 129;
+const wchar_t kMacro05 = 236;
+const wchar_t kMacro06 = 237;
+const wchar_t kMacro05Header[] = L"[)>05";
+const wchar_t kMacro06Header[] = L"[)>06";
+const wchar_t kMacroTrailer = 0x0004;
-std::vector<uint8_t>& CBC_HighLevelEncoder::getBytesForMessage(WideString msg) {
- ByteString bytestr = msg.ToUTF8();
- m_bytearray.insert(m_bytearray.end(), bytestr.begin(), bytestr.end());
- return m_bytearray;
+wchar_t Randomize253State(wchar_t ch, int32_t codewordPosition) {
+ int32_t pseudoRandom = ((149 * codewordPosition) % 253) + 1;
+ int32_t tempVariable = ch + pseudoRandom;
+ return tempVariable <= 254 ? static_cast<wchar_t>(tempVariable)
+ : static_cast<wchar_t>(tempVariable - 254);
}
+int32_t FindMinimums(std::vector<float>& charCounts,
+ std::vector<int32_t>& intCharCounts,
+ int32_t min,
+ std::vector<uint8_t>& mins) {
+ for (size_t l = 0; l < mins.size(); l++)
+ mins[l] = 0;
+
+ for (size_t i = 0; i < 6; i++) {
+ intCharCounts[i] = static_cast<int32_t>(ceil(charCounts[i]));
+ int32_t current = intCharCounts[i];
+ if (min > current) {
+ min = current;
+ for (size_t j = 0; j < mins.size(); j++)
+ mins[j] = 0;
+ }
+ if (min == current)
+ mins[i]++;
+ }
+ return min;
+}
+
+int32_t GetMinimumCount(std::vector<uint8_t>& mins) {
+ int32_t minCount = 0;
+ for (int32_t i = 0; i < 6; i++) {
+ minCount += mins[i];
+ }
+ return minCount;
+}
+
+bool IsNativeC40(wchar_t ch) {
+ return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z');
+}
+
+bool IsNativeText(wchar_t ch) {
+ return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z');
+}
+
+bool IsX12TermSep(wchar_t ch) {
+ return (ch == '\r') || (ch == '*') || (ch == '>');
+}
+
+bool IsNativeX12(wchar_t ch) {
+ return IsX12TermSep(ch) || (ch == ' ') || (ch >= '0' && ch <= '9') ||
+ (ch >= 'A' && ch <= 'Z');
+}
+
+bool IsNativeEDIFACT(wchar_t ch) {
+ return ch >= ' ' && ch <= '^';
+}
+
+} // namespace
+
// static
WideString CBC_HighLevelEncoder::EncodeHighLevel(const WideString& msg,
bool bAllowRectangular) {
@@ -70,15 +114,17 @@
if (context.HasCharactersOutsideISO88591Encoding())
return WideString();
- if ((msg.Left(6) == MACRO_05_HEADER) && (msg.Last() == MACRO_TRAILER)) {
- context.writeCodeword(MACRO_05);
- context.setSkipAtEnd(2);
- context.m_pos += 6;
- } else if ((msg.Left(6) == MACRO_06_HEADER) &&
- (msg.Last() == MACRO_TRAILER)) {
- context.writeCodeword(MACRO_06);
- context.setSkipAtEnd(2);
- context.m_pos += 6;
+ if (msg.Last() == kMacroTrailer) {
+ WideString left = msg.Left(6);
+ if (left == kMacro05Header) {
+ context.writeCodeword(kMacro05);
+ context.setSkipAtEnd(2);
+ context.m_pos += 6;
+ } else if (left == kMacro06Header) {
+ context.writeCodeword(kMacro06);
+ context.setSkipAtEnd(2);
+ context.m_pos += 6;
+ }
}
std::vector<std::unique_ptr<CBC_Encoder>> encoders;
@@ -111,15 +157,16 @@
}
WideString codewords = context.m_codewords;
if (codewords.GetLength() < capacity)
- codewords += PAD;
+ codewords += kPad;
while (codewords.GetLength() < capacity)
- codewords += randomize253State(PAD, codewords.GetLength() + 1);
+ codewords += Randomize253State(kPad, codewords.GetLength() + 1);
ASSERT(!codewords.IsEmpty());
return codewords;
}
+// static
int32_t CBC_HighLevelEncoder::lookAheadTest(const WideString& msg,
int32_t startpos,
int32_t currentMode) {
@@ -140,8 +187,8 @@
int32_t min = std::numeric_limits<int32_t>::max();
std::vector<uint8_t> mins(6);
std::vector<int32_t> intCharCounts(6);
- min = findMinimums(charCounts, intCharCounts, min, mins);
- int32_t minCount = getMinimumCount(mins);
+ min = FindMinimums(charCounts, intCharCounts, min, mins);
+ int32_t minCount = GetMinimumCount(mins);
if (intCharCounts[ASCII_ENCODATION] == min) {
return ASCII_ENCODATION;
}
@@ -170,28 +217,28 @@
charCounts[ASCII_ENCODATION] = (float)ceil(charCounts[ASCII_ENCODATION]);
charCounts[ASCII_ENCODATION]++;
}
- if (isNativeC40(c)) {
+ if (IsNativeC40(c)) {
charCounts[C40_ENCODATION] += 2.0f / 3.0f;
} else if (isExtendedASCII(c)) {
charCounts[C40_ENCODATION] += 8.0f / 3.0f;
} else {
charCounts[C40_ENCODATION] += 4.0f / 3.0f;
}
- if (isNativeText(c)) {
+ if (IsNativeText(c)) {
charCounts[TEXT_ENCODATION] += 2.0f / 3.0f;
} else if (isExtendedASCII(c)) {
charCounts[TEXT_ENCODATION] += 8.0f / 3.0f;
} else {
charCounts[TEXT_ENCODATION] += 4.0f / 3.0f;
}
- if (isNativeX12(c)) {
+ if (IsNativeX12(c)) {
charCounts[X12_ENCODATION] += 2.0f / 3.0f;
} else if (isExtendedASCII(c)) {
charCounts[X12_ENCODATION] += 13.0f / 3.0f;
} else {
charCounts[X12_ENCODATION] += 10.0f / 3.0f;
}
- if (isNativeEDIFACT(c)) {
+ if (IsNativeEDIFACT(c)) {
charCounts[EDIFACT_ENCODATION] += 3.0f / 4.0f;
} else if (isExtendedASCII(c)) {
charCounts[EDIFACT_ENCODATION] += 17.0f / 4.0f;
@@ -202,9 +249,9 @@
if (charsProcessed >= 4) {
std::vector<int32_t> intCharCounts(6);
std::vector<uint8_t> mins(6);
- findMinimums(charCounts, intCharCounts,
+ FindMinimums(charCounts, intCharCounts,
std::numeric_limits<int32_t>::max(), mins);
- int32_t minCount = getMinimumCount(mins);
+ int32_t minCount = GetMinimumCount(mins);
if (intCharCounts[ASCII_ENCODATION] < intCharCounts[BASE256_ENCODATION] &&
intCharCounts[ASCII_ENCODATION] < intCharCounts[C40_ENCODATION] &&
intCharCounts[ASCII_ENCODATION] < intCharCounts[TEXT_ENCODATION] &&
@@ -241,10 +288,10 @@
pdfium::base::checked_cast<int32_t>(msg.GetLength());
while (p < checked_length) {
wchar_t tc = msg[p];
- if (isX12TermSep(tc)) {
+ if (IsX12TermSep(tc)) {
return X12_ENCODATION;
}
- if (!isNativeX12(tc)) {
+ if (!IsNativeX12(tc)) {
break;
}
p++;
@@ -256,10 +303,12 @@
}
}
+// static
bool CBC_HighLevelEncoder::isExtendedASCII(wchar_t ch) {
return ch >= 128 && ch <= 255;
}
+// static
int32_t CBC_HighLevelEncoder::determineConsecutiveDigitCount(WideString msg,
int32_t startpos) {
int32_t count = 0;
@@ -277,55 +326,3 @@
}
return count;
}
-
-wchar_t CBC_HighLevelEncoder::randomize253State(wchar_t ch,
- int32_t codewordPosition) {
- int32_t pseudoRandom = ((149 * codewordPosition) % 253) + 1;
- int32_t tempVariable = ch + pseudoRandom;
- return tempVariable <= 254 ? static_cast<wchar_t>(tempVariable)
- : static_cast<wchar_t>(tempVariable - 254);
-}
-
-int32_t CBC_HighLevelEncoder::findMinimums(std::vector<float>& charCounts,
- std::vector<int32_t>& intCharCounts,
- int32_t min,
- std::vector<uint8_t>& mins) {
- for (size_t l = 0; l < mins.size(); l++)
- mins[l] = 0;
-
- for (size_t i = 0; i < 6; i++) {
- intCharCounts[i] = static_cast<int32_t>(ceil(charCounts[i]));
- int32_t current = intCharCounts[i];
- if (min > current) {
- min = current;
- for (size_t j = 0; j < mins.size(); j++)
- mins[j] = 0;
- }
- if (min == current)
- mins[i]++;
- }
- return min;
-}
-int32_t CBC_HighLevelEncoder::getMinimumCount(std::vector<uint8_t>& mins) {
- int32_t minCount = 0;
- for (int32_t i = 0; i < 6; i++) {
- minCount += mins[i];
- }
- return minCount;
-}
-bool CBC_HighLevelEncoder::isNativeC40(wchar_t ch) {
- return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z');
-}
-bool CBC_HighLevelEncoder::isNativeText(wchar_t ch) {
- return (ch == ' ') || (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z');
-}
-bool CBC_HighLevelEncoder::isNativeX12(wchar_t ch) {
- return isX12TermSep(ch) || (ch == ' ') || (ch >= '0' && ch <= '9') ||
- (ch >= 'A' && ch <= 'Z');
-}
-bool CBC_HighLevelEncoder::isX12TermSep(wchar_t ch) {
- return (ch == '\r') || (ch == '*') || (ch == '>');
-}
-bool CBC_HighLevelEncoder::isNativeEDIFACT(wchar_t ch) {
- return ch >= ' ' && ch <= '^';
-}
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/fxbarcode/datamatrix/BC_HighLevelEncoder.h
index b560db8..a7e25fd 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.h
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.h
@@ -20,10 +20,8 @@
class CBC_HighLevelEncoder {
public:
- CBC_HighLevelEncoder();
- ~CBC_HighLevelEncoder();
-
- std::vector<uint8_t>& getBytesForMessage(WideString msg);
+ CBC_HighLevelEncoder() = delete;
+ ~CBC_HighLevelEncoder() = delete;
// Returns an empty string on failure.
static WideString EncodeHighLevel(const WideString& msg,
@@ -36,36 +34,14 @@
static int32_t determineConsecutiveDigitCount(WideString msg,
int32_t startpos);
- static const wchar_t LATCH_TO_C40;
- static const wchar_t LATCH_TO_BASE256;
- static const wchar_t UPPER_SHIFT;
- static const wchar_t LATCH_TO_ANSIX12;
- static const wchar_t LATCH_TO_TEXT;
- static const wchar_t LATCH_TO_EDIFACT;
- static const wchar_t C40_UNLATCH;
- static const wchar_t X12_UNLATCH;
-
- private:
- static wchar_t randomize253State(wchar_t ch, int32_t codewordPosition);
- static int32_t findMinimums(std::vector<float>& charCounts,
- std::vector<int32_t>& intCharCounts,
- int32_t min,
- std::vector<uint8_t>& mins);
- static int32_t getMinimumCount(std::vector<uint8_t>& mins);
- static bool isNativeC40(wchar_t ch);
- static bool isNativeText(wchar_t ch);
- static bool isNativeX12(wchar_t ch);
- static bool isX12TermSep(wchar_t ch);
- static bool isNativeEDIFACT(wchar_t ch);
-
- static const wchar_t PAD;
- static const wchar_t MACRO_05;
- static const wchar_t MACRO_06;
- static const wchar_t MACRO_05_HEADER[];
- static const wchar_t MACRO_06_HEADER[];
- static const wchar_t MACRO_TRAILER;
-
- std::vector<uint8_t> m_bytearray;
+ static const wchar_t LATCH_TO_C40 = 230;
+ static const wchar_t LATCH_TO_BASE256 = 231;
+ static const wchar_t UPPER_SHIFT = 235;
+ static const wchar_t LATCH_TO_ANSIX12 = 238;
+ static const wchar_t LATCH_TO_TEXT = 239;
+ static const wchar_t LATCH_TO_EDIFACT = 240;
+ static const wchar_t C40_UNLATCH = 254;
+ static const wchar_t X12_UNLATCH = 254;
};
#endif // FXBARCODE_DATAMATRIX_BC_HIGHLEVELENCODER_H_