Move ASCII string operations to string_view_template.h Allows interoperability with both Strings and StringViews of either kind. Test: tested by widestring wrapper. Change-Id: Ifd11f1985ec758143ed4a6f5e9e813262684513f Reviewed-on: https://pdfium-review.googlesource.com/c/46210 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h index e1924fe..adedbdc 100644 --- a/core/fxcrt/string_view_template.h +++ b/core/fxcrt/string_view_template.h
@@ -109,6 +109,40 @@ return !(*this == other); } + bool IsASCII() const { + for (auto c : *this) { + if (c <= 0 || c > 127) // Questionable signedness of |c|. + return false; + } + return true; + } + + bool EqualsASCII(const StringViewTemplate<char>& that) const { + size_t length = GetLength(); + if (length != that.GetLength()) + return false; + + for (size_t i = 0; i < length; ++i) { + auto c = (*this)[i]; + if (c <= 0 || c > 127 || c != that[i]) // Questionable signedness of |c|. + return false; + } + return true; + } + + bool EqualsASCIINoCase(const StringViewTemplate<char>& that) const { + size_t length = GetLength(); + if (length != that.GetLength()) + return false; + + for (size_t i = 0; i < length; ++i) { + auto c = (*this)[i]; + if (c <= 0 || c > 127 || tolower(c) != tolower(that[i])) + return false; + } + return true; + } + uint32_t GetID() const { if (m_Span.size() == 0) return 0;
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp index bda34e1..0ddbcd9 100644 --- a/core/fxcrt/widestring.cpp +++ b/core/fxcrt/widestring.cpp
@@ -635,40 +635,6 @@ return m_pData ? m_pData->m_nRefs : 0; } -bool WideString::IsASCII() const { - for (wchar_t wc : *this) { - if (wc <= 0 || wc > 127) // Questionable signedness of wchar_t. - return false; - } - return true; -} - -bool WideString::EqualsASCII(const ByteStringView& that) const { - size_t length = GetLength(); - if (length != that.GetLength()) - return false; - - for (size_t i = 0; i < length; ++i) { - wchar_t wc = (*this)[i]; - if (wc <= 0 || wc > 127 || wc != that[i]) - return false; - } - return true; -} - -bool WideString::EqualsASCIINoCase(const ByteStringView& that) const { - size_t length = GetLength(); - if (length != that.GetLength()) - return false; - - for (size_t i = 0; i < length; ++i) { - wchar_t wc = (*this)[i]; - if (wc <= 0 || wc > 127 || tolower(wc) != tolower(that[i])) - return false; - } - return true; -} - ByteString WideString::ToASCII() const { ByteString result; result.Reserve(GetLength());
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h index be03731..f918bca 100644 --- a/core/fxcrt/widestring.h +++ b/core/fxcrt/widestring.h
@@ -192,9 +192,13 @@ size_t Replace(const WideStringView& pOld, const WideStringView& pNew); size_t Remove(wchar_t ch); - bool IsASCII() const; - bool EqualsASCII(const ByteStringView& that) const; - bool EqualsASCIINoCase(const ByteStringView& that) const; + bool IsASCII() const { return AsStringView().IsASCII(); } + bool EqualsASCII(const ByteStringView& that) const { + return AsStringView().EqualsASCII(that); + } + bool EqualsASCIINoCase(const ByteStringView& that) const { + return AsStringView().EqualsASCIINoCase(that); + } ByteString ToASCII() const; ByteString ToDefANSI() const;