Index: core/fxcrt/include/fx_string.h |
diff --git a/core/fxcrt/include/fx_string.h b/core/fxcrt/include/fx_string.h |
index 9aa67845f877425b52f0981734980d411a1a6511..cbf8c4de2fe76ef6f44039baa6cd8a2fe6fe047b 100644 |
--- a/core/fxcrt/include/fx_string.h |
+++ b/core/fxcrt/include/fx_string.h |
@@ -61,8 +61,6 @@ class CFX_ByteStringC { |
m_Length = src.m_Length; |
} |
- CFX_ByteStringC(const CFX_ByteString& src); |
- |
CFX_ByteStringC& operator=(const FX_CHAR* src) { |
m_Ptr = (const uint8_t*)src; |
m_Length = m_Ptr ? FXSYS_strlen(src) : 0; |
@@ -167,12 +165,14 @@ class CFX_ByteString { |
static CFX_ByteString FromUnicode(const CFX_WideString& str); |
// Explicit conversion to C-style string. |
+ // Note: |this| must outlive the use of the result. |
const FX_CHAR* c_str() const { return m_pData ? m_pData->m_String : ""; } |
// Implicit conversion to C-style string -- deprecated. |
operator const FX_CHAR*() const { return m_pData ? m_pData->m_String : ""; } |
// Explicit conversion to uint8_t*. |
+ // Note: |this| must outlive the use of the result. |
const uint8_t* raw_str() const { |
return m_pData ? reinterpret_cast<const uint8_t*>(m_pData->m_String) |
: nullptr; |
@@ -184,6 +184,12 @@ class CFX_ByteString { |
: nullptr; |
} |
+ // Explicit conversion to CFX_ByteStringC. |
+ // Note: |this| must outlive the use of the result. |
+ CFX_ByteStringC AsByteStringC() const { |
+ return CFX_ByteStringC(raw_str(), GetLength()); |
+ } |
+ |
FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; } |
bool IsEmpty() const { return !GetLength(); } |
@@ -330,10 +336,6 @@ class CFX_ByteString { |
friend class fxcrt_ByteStringConcat_Test; |
}; |
-inline CFX_ByteStringC::CFX_ByteStringC(const CFX_ByteString& src) { |
- m_Ptr = (const uint8_t*)src; |
- m_Length = src.GetLength(); |
-} |
inline CFX_ByteStringC& CFX_ByteStringC::operator=(const CFX_ByteString& src) { |
m_Ptr = (const uint8_t*)src; |
m_Length = src.GetLength(); |
@@ -373,29 +375,29 @@ inline CFX_ByteString operator+(FX_CHAR ch, const CFX_ByteStringC& str2) { |
} |
inline CFX_ByteString operator+(const CFX_ByteString& str1, |
const CFX_ByteString& str2) { |
- return CFX_ByteString(str1, str2); |
+ return CFX_ByteString(str1.AsByteStringC(), str2.AsByteStringC()); |
} |
inline CFX_ByteString operator+(const CFX_ByteString& str1, FX_CHAR ch) { |
- return CFX_ByteString(str1, CFX_ByteStringC(ch)); |
+ return CFX_ByteString(str1.AsByteStringC(), CFX_ByteStringC(ch)); |
} |
inline CFX_ByteString operator+(FX_CHAR ch, const CFX_ByteString& str2) { |
- return CFX_ByteString(ch, str2); |
+ return CFX_ByteString(ch, str2.AsByteStringC()); |
} |
inline CFX_ByteString operator+(const CFX_ByteString& str1, |
const FX_CHAR* str2) { |
- return CFX_ByteString(str1, str2); |
+ return CFX_ByteString(str1.AsByteStringC(), str2); |
} |
inline CFX_ByteString operator+(const FX_CHAR* str1, |
const CFX_ByteString& str2) { |
- return CFX_ByteString(str1, str2); |
+ return CFX_ByteString(str1, str2.AsByteStringC()); |
} |
inline CFX_ByteString operator+(const CFX_ByteString& str1, |
const CFX_ByteStringC& str2) { |
- return CFX_ByteString(str1, str2); |
+ return CFX_ByteString(str1.AsByteStringC(), str2); |
} |
inline CFX_ByteString operator+(const CFX_ByteStringC& str1, |
const CFX_ByteString& str2) { |
- return CFX_ByteString(str1, str2); |
+ return CFX_ByteString(str1, str2.AsByteStringC()); |
} |
class CFX_WideStringC { |
@@ -758,7 +760,7 @@ inline CFX_ByteString FX_UTF8Encode(const CFX_WideString& wsStr) { |
FX_FLOAT FX_atof(const CFX_ByteStringC& str); |
inline FX_FLOAT FX_atof(const CFX_WideStringC& wsStr) { |
- return FX_atof(FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength())); |
+ return FX_atof(FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength()).c_str()); |
} |
void FX_atonum(const CFX_ByteStringC& str, FX_BOOL& bInteger, void* pData); |
FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf); |