Change CBC_OneDimWriter::AppendPattern() to use spans.
Stop manually specifying the size in many cases.
Change-Id: I6476b2ae72f196d3875892411bfdffa01acdd36d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/101074
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fxbarcode/oned/BC_OneDimWriter.cpp b/fxbarcode/oned/BC_OneDimWriter.cpp
index 9f54443..99341f8 100644
--- a/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -85,20 +85,20 @@
m_fontColor = color;
}
-size_t CBC_OneDimWriter::AppendPattern(uint8_t* target,
- size_t pos,
- const uint8_t* pattern,
- int32_t patternLength,
- bool startColor) {
+pdfium::span<uint8_t> CBC_OneDimWriter::AppendPattern(
+ pdfium::span<uint8_t> target,
+ pdfium::span<const uint8_t> pattern,
+ bool startColor) {
bool color = startColor;
size_t added = 0;
- for (int32_t i = 0; i < patternLength; i++) {
- for (int32_t j = 0; j < pattern[i]; j++)
+ size_t pos = 0;
+ for (const int8_t pattern_value : pattern) {
+ for (int32_t i = 0; i < pattern_value; ++i)
target[pos++] = color ? 1 : 0;
- added += pattern[i];
+ added += pattern_value;
color = !color;
}
- return added;
+ return target.subspan(added);
}
void CBC_OneDimWriter::CalcTextInfo(const ByteString& text,
diff --git a/fxbarcode/oned/BC_OneDimWriter.h b/fxbarcode/oned/BC_OneDimWriter.h
index e36501f..49957b5 100644
--- a/fxbarcode/oned/BC_OneDimWriter.h
+++ b/fxbarcode/oned/BC_OneDimWriter.h
@@ -73,11 +73,9 @@
float geWidth,
int32_t fontSize,
float& charsLen);
- size_t AppendPattern(uint8_t* target,
- size_t pos,
- const uint8_t* pattern,
- int32_t patternLength,
- bool startColor);
+ pdfium::span<uint8_t> AppendPattern(pdfium::span<uint8_t> target,
+ pdfium::span<const uint8_t> pattern,
+ bool startColor);
bool m_bPrintChecksum = true;
bool m_bCalcChecksum = false;
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.cpp b/fxbarcode/oned/BC_OnedCode128Writer.cpp
index 2515780..0dafaa0 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -140,10 +140,10 @@
codeWidth += pattern[i];
}
DataVector<uint8_t> result(codeWidth);
- size_t pos = 0;
- for (size_t i = 0; i < patterns.size(); ++i) {
- const uint8_t* pattern = kCodePatterns[patterns[i]];
- pos += AppendPattern(result.data(), pos, pattern, kPatternSize, true);
+ auto result_span = pdfium::make_span(result);
+ for (const int32_t pattern_index : patterns) {
+ const uint8_t* pattern = kCodePatterns[pattern_index];
+ result_span = AppendPattern(result_span, {pattern, kPatternSize}, true);
}
return result;
}
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.cpp b/fxbarcode/oned/BC_OnedCode39Writer.cpp
index f046717..2f781c2 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer.cpp
@@ -172,11 +172,12 @@
}
}
DataVector<uint8_t> result(code_width);
+ auto result_span = pdfium::make_span(result);
ToIntArray(kOnedCode39CharacterEncoding[39], widths);
- size_t pos = AppendPattern(result.data(), 0, widths, kArraySize, true);
+ result_span = AppendPattern(result_span, widths, true);
static constexpr uint8_t kNarrowWhite[] = {1};
- pos += AppendPattern(result.data(), pos, kNarrowWhite, 1, false);
+ result_span = AppendPattern(result_span, kNarrowWhite, false);
for (int32_t l = m_iContentLen - 1; l >= 0; l--) {
for (size_t i = 0; i < kOnedCode39AlphabetLen; i++) {
@@ -184,12 +185,12 @@
continue;
ToIntArray(kOnedCode39CharacterEncoding[i], widths);
- pos += AppendPattern(result.data(), pos, widths, kArraySize, true);
+ result_span = AppendPattern(result_span, widths, true);
}
- pos += AppendPattern(result.data(), pos, kNarrowWhite, 1, false);
+ result_span = AppendPattern(result_span, kNarrowWhite, false);
}
ToIntArray(kOnedCode39CharacterEncoding[39], widths);
- pos += AppendPattern(result.data(), pos, widths, kArraySize, true);
+ AppendPattern(result_span, widths, true);
for (size_t i = 0; i < code_width / 2; i++) {
result[i] ^= result[code_width - 1 - i];
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index c902463..325d424 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -93,26 +93,23 @@
int32_t firstDigit = FXSYS_DecimalCharToInt(contents.Front());
int32_t parities = kFirstDigitEncodings[firstDigit];
DataVector<uint8_t> result(m_codeWidth);
- size_t pos = 0;
- pos += AppendPattern(result.data(), pos, kOnedEAN13StartPattern, 3, true);
+ auto result_span = pdfium::make_span(result);
+ result_span = AppendPattern(result_span, kOnedEAN13StartPattern, true);
- int32_t i = 0;
- for (i = 1; i <= 6; i++) {
+ for (int i = 1; i <= 6; i++) {
int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
if ((parities >> (6 - i) & 1) == 1) {
digit += 10;
}
- pos +=
- AppendPattern(result.data(), pos, kOnedEAN13LGPattern[digit], 4, false);
+ result_span = AppendPattern(result_span, kOnedEAN13LGPattern[digit], false);
}
- pos += AppendPattern(result.data(), pos, kOnedEAN13MiddlePattern, 5, false);
+ result_span = AppendPattern(result_span, kOnedEAN13MiddlePattern, false);
- for (i = 7; i <= 12; i++) {
+ for (int i = 7; i <= 12; i++) {
int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
- pos +=
- AppendPattern(result.data(), pos, kOnedEAN13LPattern[digit], 4, true);
+ result_span = AppendPattern(result_span, kOnedEAN13LPattern[digit], true);
}
- pos += AppendPattern(result.data(), pos, kOnedEAN13StartPattern, 3, true);
+ AppendPattern(result_span, kOnedEAN13StartPattern, true);
return result;
}
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 6b23dfd..6317c9b 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -93,22 +93,20 @@
return {};
DataVector<uint8_t> result(m_codeWidth);
- size_t pos = 0;
- pos += AppendPattern(result.data(), pos, kOnedEAN8StartPattern, 3, true);
+ auto result_span = pdfium::make_span(result);
+ result_span = AppendPattern(result_span, kOnedEAN8StartPattern, true);
- int32_t i = 0;
- for (i = 0; i <= 3; i++) {
+ for (int i = 0; i <= 3; i++) {
int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
- pos +=
- AppendPattern(result.data(), pos, kOnedEAN8LPattern[digit], 4, false);
+ result_span = AppendPattern(result_span, kOnedEAN8LPattern[digit], false);
}
- pos += AppendPattern(result.data(), pos, kOnedEAN8MiddlePattern, 5, false);
+ result_span = AppendPattern(result_span, kOnedEAN8MiddlePattern, false);
- for (i = 4; i <= 7; i++) {
+ for (int i = 4; i <= 7; i++) {
int32_t digit = FXSYS_DecimalCharToInt(contents[i]);
- pos += AppendPattern(result.data(), pos, kOnedEAN8LPattern[digit], 4, true);
+ result_span = AppendPattern(result_span, kOnedEAN8LPattern[digit], true);
}
- pos += AppendPattern(result.data(), pos, kOnedEAN8StartPattern, 3, true);
+ AppendPattern(result_span, kOnedEAN8StartPattern, true);
return result;
}