From 12db7515f17228798d1aa38fce0fee3e7d2d36b6 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Wed, 23 Aug 2017 10:39:35 -0400 Subject: Convert string Find methods to return an Optional The Find and ReverseFind methods for WideString, WideStringC, ByteString, and ByteStringC have been converted from returning a raw FX_STRSIZE, to returning Optional, so that success/failure can be indicated without using FX_STRNPOS. This allows for removing FX_STRNPOS and by association makes the conversion of FX_STRSIZE to size_t easier, since it forces checking the return value of Find to be explictly done as well as taking the error value out of the range of FX_STRSIZE. New Contains methods have been added for cases where the success or failure is all the call site to Find cared about, and the actual position was ignored. BUG=pdfium:828 Change-Id: Id827e508c8660affa68cc08a13d96121369364b7 Reviewed-on: https://pdfium-review.googlesource.com/11350 Commit-Queue: Ryan Harrison Reviewed-by: dsinclair --- core/fxcrt/cfx_bytestring.cpp | 47 ++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 21 deletions(-) (limited to 'core/fxcrt/cfx_bytestring.cpp') diff --git a/core/fxcrt/cfx_bytestring.cpp b/core/fxcrt/cfx_bytestring.cpp index cd049dcc5d..f6074e961b 100644 --- a/core/fxcrt/cfx_bytestring.cpp +++ b/core/fxcrt/cfx_bytestring.cpp @@ -564,43 +564,48 @@ CFX_ByteString CFX_ByteString::Left(FX_STRSIZE nCount) const { return dest; } -FX_STRSIZE CFX_ByteString::Find(char ch, FX_STRSIZE nStart) const { +pdfium::Optional CFX_ByteString::Find(char ch, + FX_STRSIZE nStart) const { if (!m_pData) - return FX_STRNPOS; + return pdfium::Optional(); if (nStart < 0 || nStart >= m_pData->m_nDataLength) - return FX_STRNPOS; + return pdfium::Optional(); const char* pStr = static_cast( memchr(m_pData->m_String + nStart, ch, m_pData->m_nDataLength - nStart)); - return pStr ? pStr - m_pData->m_String : FX_STRNPOS; + return pStr ? pdfium::Optional( + static_cast(pStr - m_pData->m_String)) + : pdfium::Optional(); } -FX_STRSIZE CFX_ByteString::ReverseFind(char ch) const { +pdfium::Optional CFX_ByteString::Find(const CFX_ByteStringC& pSub, + FX_STRSIZE nStart) const { if (!m_pData) - return FX_STRNPOS; - - FX_STRSIZE nLength = m_pData->m_nDataLength; - while (nLength--) { - if (m_pData->m_String[nLength] == ch) - return nLength; - } - return FX_STRNPOS; -} - -FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& pSub, - FX_STRSIZE nStart) const { - if (!m_pData) - return FX_STRNPOS; + return pdfium::Optional(); FX_STRSIZE nLength = m_pData->m_nDataLength; if (nStart > nLength) - return FX_STRNPOS; + return pdfium::Optional(); const char* pStr = FX_strstr(m_pData->m_String + nStart, m_pData->m_nDataLength - nStart, pSub.unterminated_c_str(), pSub.GetLength()); - return pStr ? (int)(pStr - m_pData->m_String) : FX_STRNPOS; + return pStr ? pdfium::Optional( + static_cast(pStr - m_pData->m_String)) + : pdfium::Optional(); +} + +pdfium::Optional CFX_ByteString::ReverseFind(char ch) const { + if (!m_pData) + return pdfium::Optional(); + + FX_STRSIZE nLength = m_pData->m_nDataLength; + while (nLength--) { + if (m_pData->m_String[nLength] == ch) + return pdfium::Optional(nLength); + } + return pdfium::Optional(); } void CFX_ByteString::MakeLower() { -- cgit v1.2.3