Use spancpy() in more places
Perform a single copy operation instead of copying one element at a
time, or switch to using std::array's copy ctor.
Change-Id: I0d93f55120b4755026a20e7124510b7c164d1e47
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/112571
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fpdfapi/page/cpdf_textstate.cpp b/core/fpdfapi/page/cpdf_textstate.cpp
index 37ac332..146202e 100644
--- a/core/fpdfapi/page/cpdf_textstate.cpp
+++ b/core/fpdfapi/page/cpdf_textstate.cpp
@@ -101,13 +101,9 @@
m_FontSize(that.m_FontSize),
m_CharSpace(that.m_CharSpace),
m_WordSpace(that.m_WordSpace),
- m_TextMode(that.m_TextMode) {
- for (int i = 0; i < 4; ++i)
- m_Matrix[i] = that.m_Matrix[i];
-
- for (int i = 0; i < 4; ++i)
- m_CTM[i] = that.m_CTM[i];
-
+ m_TextMode(that.m_TextMode),
+ m_Matrix(that.m_Matrix),
+ m_CTM(that.m_CTM) {
if (m_pDocument && m_pFont) {
auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument);
m_pFont = pPageData->GetFont(m_pFont->GetMutableFontDict());
diff --git a/core/fxge/dib/cfx_imagetransformer.cpp b/core/fxge/dib/cfx_imagetransformer.cpp
index 5328de8..b157dab 100644
--- a/core/fxge/dib/cfx_imagetransformer.cpp
+++ b/core/fxge/dib/cfx_imagetransformer.cpp
@@ -8,6 +8,7 @@
#include <math.h>
+#include <array>
#include <iterator>
#include <memory>
#include <utility>
@@ -17,6 +18,7 @@
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/notreached.h"
#include "core/fxcrt/numerics/safe_conversions.h"
+#include "core/fxcrt/span_util.h"
#include "core/fxge/dib/cfx_dibitmap.h"
#include "core/fxge/dib/cfx_imagestretcher.h"
#include "core/fxge/dib/fx_dib.h"
@@ -277,16 +279,14 @@
}
void CFX_ImageTransformer::CalcMono(const CalcData& calc_data) {
- uint32_t argb[256];
+ std::array<uint32_t, 256> argb;
if (m_Storer.GetBitmap()->HasPalette()) {
pdfium::span<const uint32_t> palette =
m_Storer.GetBitmap()->GetPaletteSpan();
- for (size_t i = 0; i < std::size(argb); i++)
- argb[i] = palette[i];
+ fxcrt::spancpy(pdfium::make_span(argb), palette.first(argb.size()));
} else {
- for (size_t i = 0; i < std::size(argb); i++) {
- uint32_t v = static_cast<uint32_t>(i);
- argb[i] = ArgbEncode(0xff, v, v, v);
+ for (uint32_t i = 0; i < argb.size(); ++i) {
+ argb[i] = ArgbEncode(0xff, i, i, i);
}
}
int destBpp = calc_data.bitmap->GetBPP() / 8;
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 7aef96a..50e3da5 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -13,6 +13,7 @@
#include "core/fxcrt/check.h"
#include "core/fxcrt/check_op.h"
#include "core/fxcrt/compiler_specific.h"
+#include "core/fxcrt/span_util.h"
#include "core/fxge/dib/blend.h"
#include "core/fxge/dib/fx_dib.h"
@@ -2152,8 +2153,7 @@
return;
}
pdfium::span<uint32_t> pPalette = m_SrcPalette.Make32BitPalette(pal_count);
- for (size_t i = 0; i < pal_count; ++i)
- pPalette[i] = src_palette[i];
+ fxcrt::spancpy(pPalette, src_palette.first(pal_count));
return;
}
if (bIsDestBpp8) {
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 195c368..3535a4e 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -1341,8 +1341,8 @@
const unsigned long trailer_ends_len =
fxcrt::CollectionSize<unsigned long>(trailer_ends);
if (buffer && length >= trailer_ends_len) {
- for (size_t i = 0; i < trailer_ends_len; ++i)
- buffer[i] = trailer_ends[i];
+ fxcrt::spancpy(pdfium::make_span(buffer, length),
+ pdfium::make_span(trailer_ends));
}
return trailer_ends_len;