Use span in cxfa_itemlayoutprocessor.cpp's SeparateStringW()
Also remove arg that is always passed as space and rename
to indicate this fact.
Change-Id: I795014ae9982d7e18e536ee1d55332fcba933603
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52655
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
index d0bfa10..ddae0cc 100644
--- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
@@ -36,26 +36,22 @@
namespace {
-std::vector<WideString> SeparateStringW(const wchar_t* pStr,
- int32_t iStrLen,
- wchar_t delimiter) {
+std::vector<WideString> SeparateStringOnSpace(
+ pdfium::span<const wchar_t> spStr) {
std::vector<WideString> ret;
- if (!pStr)
+ if (spStr.empty())
return ret;
- if (iStrLen < 0)
- iStrLen = wcslen(pStr);
- const wchar_t* pToken = pStr;
- const wchar_t* pEnd = pStr + iStrLen;
- while (true) {
- if (pStr >= pEnd || delimiter == *pStr) {
- ret.push_back(WideString(pToken, pStr - pToken));
- pToken = pStr + 1;
- if (pStr >= pEnd)
- break;
+ size_t nPos = 0;
+ size_t nToken = 0;
+ while (nPos < spStr.size()) {
+ if (spStr[nPos] == L' ') {
+ ret.emplace_back(WideStringView(spStr.subspan(nToken, nPos - nToken)));
+ nToken = nPos + 1;
}
- pStr++;
+ nPos++;
}
+ ret.emplace_back(WideStringView(spStr.subspan(nToken, nPos - nToken)));
return ret;
}
@@ -1160,9 +1156,7 @@
WideString wsColumnWidths =
pLayoutNode->JSObject()->GetCData(XFA_Attribute::ColumnWidths);
if (!wsColumnWidths.IsEmpty()) {
- auto widths = SeparateStringW(wsColumnWidths.c_str(),
- wsColumnWidths.GetLength(), L' ');
- for (auto& width : widths) {
+ for (auto& width : SeparateStringOnSpace(wsColumnWidths.AsSpan())) {
width.TrimLeft(L' ');
if (width.IsEmpty())
continue;