| Index: core/fxcrt/include/fx_string.h
|
| diff --git a/core/fxcrt/include/fx_string.h b/core/fxcrt/include/fx_string.h
|
| index 75957950113c08ed0b82f83bd625c7517f78c0b4..382e141dc2ff1bf9ddb79fe25993ece610c4024d 100644
|
| --- a/core/fxcrt/include/fx_string.h
|
| +++ b/core/fxcrt/include/fx_string.h
|
| @@ -482,16 +482,9 @@ class CFX_WideString {
|
| public:
|
| typedef FX_WCHAR value_type;
|
|
|
| - CFX_WideString() : m_pData(nullptr) {}
|
| -
|
| - // Copy constructor.
|
| - CFX_WideString(const CFX_WideString& str);
|
| -
|
| - // Move constructor.
|
| - CFX_WideString(CFX_WideString&& other) {
|
| - m_pData = other.m_pData;
|
| - other.m_pData = nullptr;
|
| - }
|
| + CFX_WideString() {}
|
| + CFX_WideString(const CFX_WideString& other) : m_pData(other.m_pData) {}
|
| + CFX_WideString(CFX_WideString&& other) { m_pData.Swap(other.m_pData); }
|
|
|
| CFX_WideString(const FX_WCHAR* ptr)
|
| : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) {}
|
| @@ -527,9 +520,12 @@ class CFX_WideString {
|
| return CFX_WideStringC(c_str(), GetLength());
|
| }
|
|
|
| - void Empty();
|
| - bool IsEmpty() const { return !GetLength(); }
|
| + // Deprecated -- use clear().
|
| + void Empty() { m_pData.Reset(); }
|
| + void clear() { m_pData.Reset(); }
|
| +
|
| FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
|
| + bool IsEmpty() const { return !GetLength(); }
|
|
|
| const CFX_WideString& operator=(const FX_WCHAR* str);
|
| const CFX_WideString& operator=(const CFX_WideString& stringSrc);
|
| @@ -587,11 +583,11 @@ class CFX_WideString {
|
|
|
| void TrimRight();
|
| void TrimRight(FX_WCHAR chTarget);
|
| - void TrimRight(const FX_WCHAR* lpszTargets);
|
| + void TrimRight(const CFX_WideStringC& pTargets);
|
|
|
| void TrimLeft();
|
| void TrimLeft(FX_WCHAR chTarget);
|
| - void TrimLeft(const FX_WCHAR* lpszTargets);
|
| + void TrimLeft(const CFX_WideStringC& pTargets);
|
|
|
| void Reserve(FX_STRSIZE len);
|
| FX_WCHAR* GetBuffer(FX_STRSIZE len);
|
| @@ -600,53 +596,26 @@ class CFX_WideString {
|
| int GetInteger() const;
|
| FX_FLOAT GetFloat() const;
|
|
|
| - FX_STRSIZE Find(const FX_WCHAR* lpszSub, FX_STRSIZE start = 0) const;
|
| + FX_STRSIZE Find(const CFX_WideStringC& pSub, FX_STRSIZE start = 0) const;
|
| FX_STRSIZE Find(FX_WCHAR ch, FX_STRSIZE start = 0) const;
|
| - FX_STRSIZE Replace(const FX_WCHAR* lpszOld, const FX_WCHAR* lpszNew);
|
| + FX_STRSIZE Replace(const CFX_WideStringC& pOld, const CFX_WideStringC& pNew);
|
| FX_STRSIZE Remove(FX_WCHAR ch);
|
|
|
| CFX_ByteString UTF8Encode() const;
|
| CFX_ByteString UTF16LE_Encode() const;
|
|
|
| protected:
|
| - class StringData {
|
| - public:
|
| - static StringData* Create(int nLen);
|
| - void Retain() { ++m_nRefs; }
|
| - void Release() {
|
| - if (--m_nRefs <= 0)
|
| - FX_Free(this);
|
| - }
|
| + using StringData = CFX_StringDataTemplate<FX_WCHAR>;
|
|
|
| - intptr_t m_nRefs; // Would prefer ssize_t, but no windows support.
|
| - FX_STRSIZE m_nDataLength;
|
| - FX_STRSIZE m_nAllocLength;
|
| - FX_WCHAR m_String[1];
|
| -
|
| - private:
|
| - StringData(FX_STRSIZE dataLen, FX_STRSIZE allocLen)
|
| - : m_nRefs(1), m_nDataLength(dataLen), m_nAllocLength(allocLen) {
|
| - FXSYS_assert(dataLen >= 0);
|
| - FXSYS_assert(allocLen >= 0);
|
| - FXSYS_assert(dataLen <= allocLen);
|
| - m_String[dataLen] = 0;
|
| - }
|
| - ~StringData() = delete;
|
| - };
|
| -
|
| - void CopyBeforeWrite();
|
| + void ReallocBeforeWrite(FX_STRSIZE nLen);
|
| void AllocBeforeWrite(FX_STRSIZE nLen);
|
| - void ConcatInPlace(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
|
| - void ConcatCopy(FX_STRSIZE nSrc1Len,
|
| - const FX_WCHAR* lpszSrc1Data,
|
| - FX_STRSIZE nSrc2Len,
|
| - const FX_WCHAR* lpszSrc2Data);
|
| - void AssignCopy(FX_STRSIZE nSrcLen, const FX_WCHAR* lpszSrcData);
|
| void AllocCopy(CFX_WideString& dest,
|
| FX_STRSIZE nCopyLen,
|
| FX_STRSIZE nCopyIndex) const;
|
| + void AssignCopy(const FX_WCHAR* pSrcData, FX_STRSIZE nSrcLen);
|
| + void Concat(const FX_WCHAR* lpszSrcData, FX_STRSIZE nSrcLen);
|
|
|
| - StringData* m_pData;
|
| + CFX_RetainPtr<StringData> m_pData;
|
| friend class fxcrt_WideStringConcatInPlace_Test;
|
| };
|
|
|
|
|