summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-04-18 19:04:20 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-18 19:04:20 +0000
commit7439517516a0bb3833ee95ddb9d71051f981347c (patch)
tree85dd6db5c3955fe8aebe0278bf20bd9cc6ca0d0b
parent51a41ea222eeb852be4f372165d2d9bc9094b2a4 (diff)
downloadpdfium-7439517516a0bb3833ee95ddb9d71051f981347c.tar.xz
Add AsRawSpan() to ByteString.
Also tidy AsSpan() for Byte/Wide strings. Change-Id: I1853d31a59bc7f46de81295cde2e1062b91badec Reviewed-on: https://pdfium-review.googlesource.com/30911 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: dsinclair <dsinclair@chromium.org>
-rw-r--r--core/fxcrt/bytestring.h8
-rw-r--r--core/fxcrt/bytestring_unittest.cpp17
-rw-r--r--core/fxcrt/widestring.h5
-rw-r--r--core/fxcrt/widestring_unittest.cpp6
4 files changed, 30 insertions, 6 deletions
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index 247238573d..99b87b1d4c 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -87,9 +87,11 @@ class ByteString {
// Explicit conversion to span.
// Note: Any subsequent modification of |this| will invalidate the result.
pdfium::span<const char> AsSpan() const {
- return m_pData ? pdfium::span<const char>(m_pData->m_String,
- m_pData->m_nDataLength)
- : pdfium::span<const char>();
+ return pdfium::make_span(m_pData ? m_pData->m_String : nullptr,
+ GetLength());
+ }
+ pdfium::span<const uint8_t> AsRawSpan() const {
+ return pdfium::make_span(raw_str(), GetLength());
}
// Note: Any subsequent modification of |this| will invalidate iterators.
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index d030535edd..ed3f375434 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -27,6 +27,10 @@ TEST(ByteString, ElementAccess) {
EXPECT_EQ(3u, abc_span.size());
EXPECT_EQ(0, memcmp(abc_span.data(), "abc", 3));
+ pdfium::span<const uint8_t> abc_raw_span = abc.AsRawSpan();
+ EXPECT_EQ(3u, abc_raw_span.size());
+ EXPECT_EQ(0, memcmp(abc_raw_span.data(), "abc", 3));
+
ByteString mutable_abc = abc;
EXPECT_EQ(abc.c_str(), mutable_abc.c_str());
EXPECT_EQ('a', mutable_abc[0]);
@@ -1527,8 +1531,21 @@ TEST(ByteString, Empty) {
ByteString empty_str;
EXPECT_TRUE(empty_str.IsEmpty());
EXPECT_EQ(0u, empty_str.GetLength());
+
const char* cstr = empty_str.c_str();
+ EXPECT_NE(nullptr, cstr);
EXPECT_EQ(0u, strlen(cstr));
+
+ const uint8_t* rstr = empty_str.raw_str();
+ EXPECT_EQ(nullptr, rstr);
+
+ pdfium::span<const char> cspan = empty_str.AsSpan();
+ EXPECT_TRUE(cspan.empty());
+ EXPECT_EQ(nullptr, cspan.data());
+
+ pdfium::span<const uint8_t> rspan = empty_str.AsRawSpan();
+ EXPECT_TRUE(rspan.empty());
+ EXPECT_EQ(nullptr, rspan.data());
}
TEST(ByteString, InitializerList) {
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index b668b0292c..4b097c4430 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -82,9 +82,8 @@ class WideString {
// Explicit conversion to span.
// Note: Any subsequent modification of |this| will invalidate the result.
pdfium::span<const wchar_t> AsSpan() const {
- return m_pData ? pdfium::span<const wchar_t>(m_pData->m_String,
- m_pData->m_nDataLength)
- : pdfium::span<const wchar_t>();
+ return pdfium::make_span(m_pData ? m_pData->m_String : nullptr,
+ GetLength());
}
// Note: Any subsequent modification of |this| will invalidate iterators.
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index ec0a55fc1e..4572305530 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -1353,8 +1353,14 @@ TEST(WideString, Empty) {
WideString empty_str;
EXPECT_TRUE(empty_str.IsEmpty());
EXPECT_EQ(0u, empty_str.GetLength());
+
const wchar_t* cstr = empty_str.c_str();
+ EXPECT_NE(nullptr, cstr);
EXPECT_EQ(0u, wcslen(cstr));
+
+ pdfium::span<const wchar_t> cspan = empty_str.AsSpan();
+ EXPECT_TRUE(cspan.empty());
+ EXPECT_EQ(nullptr, cspan.data());
}
TEST(CFX_WidString, InitializerList) {