summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-05-05 15:15:38 -0700
committerTom Sepez <tsepez@chromium.org>2015-05-05 15:15:38 -0700
commit2cf0d21788974dd1ea19a68259c4fbccb0e56897 (patch)
tree06f5cd5713ad59a0dfc4bf1152ac0b679c7d51b1
parentaadcd71ab29f588d4997ec25855f60f5866959f2 (diff)
downloadpdfium-2cf0d21788974dd1ea19a68259c4fbccb0e56897.tar.xz
Make sure string constructors are efficient on literals
Separate out the overload when the length is not known, and be sure that strlen() call is in the header so that strlen("foo") => 3 (since many compilers support this optimization). Also delete some unused types. BUG=pdfium:151 R=thestig@chromium.org Review URL: https://codereview.chromium.org/1117263004
-rw-r--r--core/include/fxcrt/fx_string.h26
-rw-r--r--core/src/fxcrt/fx_basic_wstring.cpp28
2 files changed, 25 insertions, 29 deletions
diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h
index c46a97166b..023f7658c3 100644
--- a/core/include/fxcrt/fx_string.h
+++ b/core/include/fxcrt/fx_string.h
@@ -12,15 +12,11 @@
#include "fx_memory.h"
-class CFX_ByteStringC;
+class CFX_BinaryBuf;
class CFX_ByteString;
-class CFX_WideStringC;
class CFX_WideString;
struct CFX_CharMap;
-class CFX_BinaryBuf;
typedef int FX_STRSIZE;
-class CFX_ByteStringL;
-class CFX_WideStringL;
// An immutable string with caller-provided storage which must outlive the
// string itself.
@@ -208,12 +204,14 @@ public:
CFX_ByteString(char ch);
- CFX_ByteString(FX_LPCSTR ptr, FX_STRSIZE len = -1);
+ CFX_ByteString(FX_LPCSTR ptr)
+ : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) { }
+
+ CFX_ByteString(FX_LPCSTR ptr, FX_STRSIZE len);
CFX_ByteString(FX_LPCBYTE ptr, FX_STRSIZE len);
CFX_ByteString(FX_BSTR bstrc);
-
CFX_ByteString(FX_BSTR bstrc1, FX_BSTR bstrc2);
~CFX_ByteString();
@@ -631,10 +629,10 @@ public:
CFX_WideString(const CFX_WideString& str);
- CFX_WideString(FX_LPCWSTR ptr, FX_STRSIZE len = -1)
- {
- InitStr(ptr, len);
- }
+ CFX_WideString(FX_LPCWSTR ptr)
+ : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) { }
+
+ CFX_WideString(FX_LPCWSTR ptr, FX_STRSIZE len);
CFX_WideString(FX_WCHAR ch);
@@ -785,16 +783,16 @@ public:
CFX_ByteString UTF16LE_Encode() const;
void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL);
-protected:
- void InitStr(FX_LPCWSTR ptr, int len);
- CFX_StringDataW* m_pData;
+protected:
void CopyBeforeWrite();
void AllocBeforeWrite(FX_STRSIZE nLen);
void ConcatInPlace(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData);
void ConcatCopy(FX_STRSIZE nSrc1Len, FX_LPCWSTR lpszSrc1Data, FX_STRSIZE nSrc2Len, FX_LPCWSTR lpszSrc2Data);
void AssignCopy(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData);
void AllocCopy(CFX_WideString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex) const;
+
+ CFX_StringDataW* m_pData;
};
inline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src)
{
diff --git a/core/src/fxcrt/fx_basic_wstring.cpp b/core/src/fxcrt/fx_basic_wstring.cpp
index 9b27537ed9..3465b4a926 100644
--- a/core/src/fxcrt/fx_basic_wstring.cpp
+++ b/core/src/fxcrt/fx_basic_wstring.cpp
@@ -63,21 +63,6 @@ CFX_WideString::~CFX_WideString()
FX_Free(m_pData);
}
}
-void CFX_WideString::InitStr(FX_LPCWSTR lpsz, FX_STRSIZE nLen)
-{
- if (nLen < 0) {
- nLen = lpsz ? (FX_STRSIZE)FXSYS_wcslen(lpsz) : 0;
- }
- if (nLen) {
- m_pData = FX_AllocStringW(nLen);
- if (!m_pData) {
- return;
- }
- FXSYS_memcpy32(m_pData->m_String, lpsz, nLen * sizeof(FX_WCHAR));
- } else {
- m_pData = NULL;
- }
-}
CFX_WideString::CFX_WideString(const CFX_WideString& stringSrc)
{
if (stringSrc.m_pData == NULL) {
@@ -92,6 +77,19 @@ CFX_WideString::CFX_WideString(const CFX_WideString& stringSrc)
*this = stringSrc;
}
}
+CFX_WideString::CFX_WideString(FX_LPCWSTR lpsz, FX_STRSIZE nLen) {
+ if (nLen < 0) {
+ nLen = lpsz ? (FX_STRSIZE)FXSYS_wcslen(lpsz) : 0;
+ }
+ if (nLen) {
+ m_pData = FX_AllocStringW(nLen);
+ if (m_pData) {
+ FXSYS_memcpy32(m_pData->m_String, lpsz, nLen * sizeof(FX_WCHAR));
+ }
+ } else {
+ m_pData = NULL;
+ }
+}
CFX_WideString::CFX_WideString(FX_WCHAR ch)
{
m_pData = FX_AllocStringW(1);