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;
 }