Provide two versions of StringViewTemplate<>::span().
Similar to the raw_str()/unterminated_c_str() methods, one of which
returns a span of the UnsignedChar type, and the other returns a span
of the CharType.
Needed for a forthcoming CL.
Change-Id: Ie816592c8fe2e24842016eeb251946efd92b8964
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52670
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index 3db1acc..d6fdd23 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -338,7 +338,7 @@
uint32_t CPDF_CMap::GetNextChar(ByteStringView pString, size_t* pOffset) const {
size_t& offset = *pOffset;
- auto pBytes = pString.span();
+ auto pBytes = pString.raw_span();
switch (m_CodingScheme) {
case OneByte: {
return offset < pBytes.size() ? pBytes[offset++] : 0;
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index c39deb3..e6ef4f7 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -59,7 +59,7 @@
return {};
ByteString csFontNameTag;
- CPDF_SimpleParser syntax(m_csDA.AsStringView().span());
+ CPDF_SimpleParser syntax(m_csDA.AsStringView().raw_span());
if (FindTagParamFromStart(&syntax, "Tf", 2)) {
csFontNameTag = ByteString(syntax.GetWord());
csFontNameTag.Delete(0, 1);
@@ -75,7 +75,7 @@
if (m_csDA.IsEmpty())
return {};
- CPDF_SimpleParser syntax(m_csDA.AsStringView().span());
+ CPDF_SimpleParser syntax(m_csDA.AsStringView().raw_span());
if (FindTagParamFromStart(&syntax, "g", 1)) {
fc[0] = StringToFloat(syntax.GetWord());
return {CFX_Color::kGray};
diff --git a/core/fpdfdoc/cpdf_metadata_unittest.cpp b/core/fpdfdoc/cpdf_metadata_unittest.cpp
index c130514..9433162 100644
--- a/core/fpdfdoc/cpdf_metadata_unittest.cpp
+++ b/core/fpdfdoc/cpdf_metadata_unittest.cpp
@@ -16,7 +16,7 @@
"</node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -33,7 +33,7 @@
"</node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -50,7 +50,7 @@
"</node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -67,7 +67,7 @@
"</node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -85,7 +85,7 @@
"</parent></grandparent>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -99,7 +99,7 @@
"<node></node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -115,7 +115,7 @@
"</node>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
@@ -145,7 +145,7 @@
"</grandparent>";
CPDF_Stream stream;
- stream.SetData(ByteStringView(data).span());
+ stream.SetData(ByteStringView(data).raw_span());
CPDF_Metadata metadata(&stream);
auto results = metadata.CheckForSharedForm();
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index 1b932bf..b9cab63 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -1381,7 +1381,7 @@
pdfium::span<const uint8_t> span5(
pdfium::as_bytes(pdfium::make_span("hello", 5)));
- EXPECT_EQ(byte_string_c.span(), span5);
+ EXPECT_EQ(byte_string_c.raw_span(), span5);
}
TEST(ByteStringView, OperatorNE) {
diff --git a/core/fxcrt/cfx_seekablemultistream_unittest.cpp b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
index 95f6a08..977563f 100644
--- a/core/fxcrt/cfx_seekablemultistream_unittest.cpp
+++ b/core/fxcrt/cfx_seekablemultistream_unittest.cpp
@@ -41,11 +41,11 @@
auto stream3 = pdfium::MakeUnique<CPDF_Stream>();
// 16 chars total.
- stream1->InitStream(ByteStringView("one t").span(),
+ stream1->InitStream(ByteStringView("one t").raw_span(),
pdfium::MakeUnique<CPDF_Dictionary>());
- stream2->InitStream(ByteStringView("wo ").span(),
+ stream2->InitStream(ByteStringView("wo ").raw_span(),
pdfium::MakeUnique<CPDF_Dictionary>());
- stream3->InitStream(ByteStringView("three!!!").span(),
+ stream3->InitStream(ByteStringView("three!!!").raw_span(),
pdfium::MakeUnique<CPDF_Dictionary>());
streams.push_back(stream1.get());
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h
index df9e36f..90022c8 100644
--- a/core/fxcrt/string_view_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -158,7 +158,11 @@
return strid << ((4 - size) * 8);
}
- pdfium::span<const UnsignedType> span() const { return m_Span; }
+ pdfium::span<const UnsignedType> raw_span() const { return m_Span; }
+ pdfium::span<const CharType> span() const {
+ return pdfium::make_span(reinterpret_cast<const CharType*>(m_Span.data()),
+ m_Span.size());
+ }
const UnsignedType* raw_str() const { return m_Span.data(); }
const CharType* unterminated_c_str() const {
return reinterpret_cast<const CharType*>(m_Span.data());
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp
index aedfff4..f6cabcd 100644
--- a/fpdfsdk/fpdf_transformpage.cpp
+++ b/fpdfsdk/fpdf_transformpage.cpp
@@ -200,7 +200,7 @@
CPDF_Stream* pEndStream =
pDoc->NewIndirect<CPDF_Stream>(nullptr, 0, pDoc->New<CPDF_Dictionary>());
- pEndStream->SetData(ByteStringView(" Q").span());
+ pEndStream->SetData(ByteStringView(" Q").raw_span());
if (CPDF_Array* pContentArray = ToArray(pContentObj)) {
pContentArray->InsertAt(0, pStream->MakeReference(pDoc));
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 0123035..9b1e84b 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -1056,7 +1056,7 @@
CPDF_NameTree name_tree(pDoc, "Dests");
ByteStringView name_view(name);
return FPDFDestFromCPDFArray(
- name_tree.LookupNamedDest(pDoc, PDF_DecodeText(name_view.span())));
+ name_tree.LookupNamedDest(pDoc, PDF_DecodeText(name_view.raw_span())));
}
#ifdef PDF_ENABLE_V8
@@ -1160,7 +1160,7 @@
break;
i++;
}
- wsName = PDF_DecodeText(bsName.span());
+ wsName = PDF_DecodeText(bsName.raw_span());
} else {
pDestObj = nameTree.LookupValueAndName(index, &wsName);
}