From a2188df09255b49ad41a89ae9b5de640d0b03126 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Fri, 1 Sep 2017 15:11:12 -0400 Subject: Cleanup usages of Mid(foo, 1), Right(1), and Left(1) Mid(foo, 1) is equivalent to [foo], if all you want is the character. Similarly Left(1) is [0]. It is faster also, since it does not need to create intermediate strings. Right(1) is a touch more tricky, since it requires something like GetLength() ? [GetLength() - 1] : 0;. A new method, Last() has been added to perform this character extraction. Multiple call sites have been updated to use more efficient/simpler syntax. There are a number of call sites that use on these patterns, but based on the surrounding context we actually need/want a string, so they have not been modified. Change-Id: I485a7f9c7b34c9bdacecada610158f996816afdd Reviewed-on: https://pdfium-review.googlesource.com/12890 Commit-Queue: Ryan Harrison Reviewed-by: Tom Sepez --- core/fpdfapi/font/cpdf_cmap.cpp | 4 ++-- core/fxcrt/cfx_bytestring.h | 3 +++ core/fxcrt/cfx_string_c_template.h | 6 ++++++ core/fxcrt/cfx_widestring.h | 3 +++ 4 files changed, 14 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp index 659139f687..0d3745e44a 100644 --- a/core/fpdfapi/font/cpdf_cmap.cpp +++ b/core/fpdfapi/font/cpdf_cmap.cpp @@ -253,12 +253,12 @@ void CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr, m_PredefinedCMap = bsName; if (m_PredefinedCMap == "Identity-H" || m_PredefinedCMap == "Identity-V") { m_Coding = CIDCODING_CID; - m_bVertical = bsName[9] == 'V'; + m_bVertical = bsName.Last() == 'V'; m_bLoaded = true; return; } CFX_ByteString cmapid = m_PredefinedCMap; - m_bVertical = cmapid.Right(1) == "V"; + m_bVertical = cmapid.Last() == 'V'; if (cmapid.GetLength() > 2) { cmapid = cmapid.Left(cmapid.GetLength() - 2); } diff --git a/core/fxcrt/cfx_bytestring.h b/core/fxcrt/cfx_bytestring.h index a47b5f89ab..261060bda0 100644 --- a/core/fxcrt/cfx_bytestring.h +++ b/core/fxcrt/cfx_bytestring.h @@ -120,6 +120,9 @@ class CFX_ByteString { return m_pData ? m_pData->m_String[index] : 0; } + CharType First() const { return GetLength() ? (*this)[0] : 0; } + CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; } + void SetAt(FX_STRSIZE index, char c); FX_STRSIZE Insert(FX_STRSIZE index, char ch); diff --git a/core/fxcrt/cfx_string_c_template.h b/core/fxcrt/cfx_string_c_template.h index c46b0c4671..6bc71d853d 100644 --- a/core/fxcrt/cfx_string_c_template.h +++ b/core/fxcrt/cfx_string_c_template.h @@ -135,6 +135,12 @@ class CFX_StringCTemplate { return m_Ptr.Get()[index]; } + UnsignedType First() const { return GetLength() ? (*this)[0] : 0; } + + UnsignedType Last() const { + return GetLength() ? (*this)[GetLength() - 1] : 0; + } + const CharType CharAt(const FX_STRSIZE index) const { ASSERT(IsValidIndex(index)); return static_cast(m_Ptr.Get()[index]); diff --git a/core/fxcrt/cfx_widestring.h b/core/fxcrt/cfx_widestring.h index 242138853b..100fec6706 100644 --- a/core/fxcrt/cfx_widestring.h +++ b/core/fxcrt/cfx_widestring.h @@ -115,6 +115,9 @@ class CFX_WideString { return m_pData ? m_pData->m_String[index] : 0; } + CharType First() const { return GetLength() ? (*this)[0] : 0; } + CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; } + void SetAt(FX_STRSIZE index, wchar_t c); int Compare(const wchar_t* str) const; -- cgit v1.2.3