From 8b36e5cc3d5f5f579c6b060e2c40b896a4b02bc0 Mon Sep 17 00:00:00 2001 From: tsepez Date: Fri, 8 Apr 2016 09:00:35 -0700 Subject: Make CFX_WideString::FromLocal() take a CFX_ByteStringC arg It doesn't persist the string beyond the duration of the call, hence it should take the *StringC variant. Doing so avoids some allocs by changing to the *StringC ctor in a few places, at the cost of some explicit .ToByteStringC() calls (which are cheap). Review URL: https://codereview.chromium.org/1862953004 --- core/fxcrt/fx_basic_bstring.cpp | 2 +- core/fxcrt/fx_basic_wstring.cpp | 13 +++++++------ core/fxcrt/fx_extension.cpp | 2 +- core/fxcrt/include/fx_basic.h | 4 ++-- core/fxcrt/include/fx_string.h | 4 ++-- 5 files changed, 13 insertions(+), 12 deletions(-) (limited to 'core/fxcrt') diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp index 2c2264a419..cc0dfe2341 100644 --- a/core/fxcrt/fx_basic_bstring.cpp +++ b/core/fxcrt/fx_basic_bstring.cpp @@ -824,7 +824,7 @@ CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str, // static CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) { - return CFX_CharMap::GetByteString(0, str); + return CFX_CharMap::GetByteString(0, str.AsWideStringC()); } int CFX_ByteString::Compare(const CFX_ByteStringC& str) const { diff --git a/core/fxcrt/fx_basic_wstring.cpp b/core/fxcrt/fx_basic_wstring.cpp index e2e122be9a..b5ccaf6da5 100644 --- a/core/fxcrt/fx_basic_wstring.cpp +++ b/core/fxcrt/fx_basic_wstring.cpp @@ -747,12 +747,12 @@ void CFX_WideString::SetAt(FX_STRSIZE nIndex, FX_WCHAR ch) { } // static -CFX_WideString CFX_WideString::FromLocal(const CFX_ByteString& str) { +CFX_WideString CFX_WideString::FromLocal(const CFX_ByteStringC& str) { return FromCodePage(str, 0); } // static -CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteString& str, +CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteStringC& str, uint16_t codepage) { return CFX_CharMap::GetWideString(codepage, str); } @@ -943,7 +943,7 @@ FX_FLOAT CFX_WideString::GetFloat() const { // static CFX_ByteString CFX_CharMap::GetByteString(uint16_t codepage, - const CFX_WideString& wstr) { + const CFX_WideStringC& wstr) { FXSYS_assert(IsValidCodePage(codepage)); int src_len = wstr.GetLength(); int dest_len = FXSYS_WideCharToMultiByte(codepage, 0, wstr.c_str(), src_len, @@ -960,15 +960,16 @@ CFX_ByteString CFX_CharMap::GetByteString(uint16_t codepage, // static CFX_WideString CFX_CharMap::GetWideString(uint16_t codepage, - const CFX_ByteString& bstr) { + const CFX_ByteStringC& bstr) { FXSYS_assert(IsValidCodePage(codepage)); int src_len = bstr.GetLength(); int dest_len = - FXSYS_MultiByteToWideChar(codepage, 0, bstr, src_len, nullptr, 0); + FXSYS_MultiByteToWideChar(codepage, 0, bstr.c_str(), src_len, nullptr, 0); CFX_WideString wstr; if (dest_len) { FX_WCHAR* dest_buf = wstr.GetBuffer(dest_len); - FXSYS_MultiByteToWideChar(codepage, 0, bstr, src_len, dest_buf, dest_len); + FXSYS_MultiByteToWideChar(codepage, 0, bstr.c_str(), src_len, dest_buf, + dest_len); wstr.ReleaseBuffer(dest_len); } return wstr; diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp index 7e8029baba..f1fd980120 100644 --- a/core/fxcrt/fx_extension.cpp +++ b/core/fxcrt/fx_extension.cpp @@ -134,7 +134,7 @@ FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, iLength = (int32_t)FXSYS_strlen(pcsStr); } CFX_WideString ws = - CFX_WideString::FromLocal(CFX_ByteString(pcsStr, iLength)); + CFX_WideString::FromLocal(CFX_ByteStringC(pcsStr, iLength)); return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); } FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, diff --git a/core/fxcrt/include/fx_basic.h b/core/fxcrt/include/fx_basic.h index 744b2dd10f..1cb5174351 100644 --- a/core/fxcrt/include/fx_basic.h +++ b/core/fxcrt/include/fx_basic.h @@ -186,10 +186,10 @@ class CFX_FileBufferArchive { class CFX_CharMap { public: static CFX_ByteString GetByteString(uint16_t codepage, - const CFX_WideString& wstr); + const CFX_WideStringC& wstr); static CFX_WideString GetWideString(uint16_t codepage, - const CFX_ByteString& bstr); + const CFX_ByteStringC& bstr); CFX_CharMap() = delete; }; diff --git a/core/fxcrt/include/fx_string.h b/core/fxcrt/include/fx_string.h index 382e141dc2..8a0b3ff3db 100644 --- a/core/fxcrt/include/fx_string.h +++ b/core/fxcrt/include/fx_string.h @@ -497,8 +497,8 @@ class CFX_WideString { ~CFX_WideString(); - static CFX_WideString FromLocal(const CFX_ByteString& str); - static CFX_WideString FromCodePage(const CFX_ByteString& str, + static CFX_WideString FromLocal(const CFX_ByteStringC& str); + static CFX_WideString FromCodePage(const CFX_ByteStringC& str, uint16_t codepage); static CFX_WideString FromUTF8(const CFX_ByteStringC& str); -- cgit v1.2.3