Index: core/fxcrt/fx_basic_bstring.cpp |
diff --git a/core/fxcrt/fx_basic_bstring.cpp b/core/fxcrt/fx_basic_bstring.cpp |
index 379f1ee882ca2673de6da276548194dbcb7b3a0e..bc59e62ca58467968727a7959d069a2e6843563a 100644 |
--- a/core/fxcrt/fx_basic_bstring.cpp |
+++ b/core/fxcrt/fx_basic_bstring.cpp |
@@ -94,11 +94,23 @@ CFX_ByteString::CFX_ByteString(const uint8_t* pStr, FX_STRSIZE nLen) { |
} |
} |
+CFX_ByteString::CFX_ByteString() {} |
+ |
+CFX_ByteString::CFX_ByteString(const CFX_ByteString& other) |
+ : m_pData(other.m_pData) {} |
+ |
+CFX_ByteString::CFX_ByteString(CFX_ByteString&& other) { |
+ m_pData.Swap(other.m_pData); |
+} |
+ |
CFX_ByteString::CFX_ByteString(char ch) { |
m_pData.Reset(StringData::Create(1)); |
m_pData->m_String[0] = ch; |
} |
+CFX_ByteString::CFX_ByteString(const FX_CHAR* ptr) |
+ : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) {} |
+ |
CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& stringSrc) { |
if (!stringSrc.IsEmpty()) |
m_pData.Reset(StringData::Create(stringSrc.c_str(), stringSrc.GetLength())); |
@@ -117,6 +129,10 @@ CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& str1, |
CFX_ByteString::~CFX_ByteString() {} |
+void CFX_ByteString::clear() { |
+ m_pData.Reset(); |
+} |
+ |
const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* pStr) { |
if (!pStr || !pStr[0]) |
clear(); |
@@ -201,6 +217,32 @@ bool CFX_ByteString::operator==(const CFX_ByteString& other) const { |
m_pData->m_nDataLength) == 0; |
} |
+bool CFX_ByteString::operator!=(const char* ptr) const { |
+ return !(*this == ptr); |
+} |
+ |
+bool CFX_ByteString::operator!=(const CFX_ByteStringC& str) const { |
+ return !(*this == str); |
+} |
+ |
+bool CFX_ByteString::operator!=(const CFX_ByteString& other) const { |
+ return !(*this == other); |
+} |
+ |
+bool CFX_ByteString::operator<(const CFX_ByteString& str) const { |
+ int result = FXSYS_memcmp(c_str(), str.c_str(), |
+ std::min(GetLength(), str.GetLength())); |
+ return result < 0 || (result == 0 && GetLength() < str.GetLength()); |
+} |
+ |
+uint8_t CFX_ByteString::GetAt(FX_STRSIZE nIndex) const { |
+ return m_pData ? m_pData->m_String[nIndex] : 0; |
+} |
+ |
+uint8_t CFX_ByteString::operator[](FX_STRSIZE nIndex) const { |
+ return m_pData ? m_pData->m_String[nIndex] : 0; |
+} |
+ |
bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const { |
if (!m_pData) |
return str.IsEmpty(); |
@@ -835,6 +877,27 @@ CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) { |
return CFX_CharMap::GetByteString(0, str.AsStringC()); |
} |
+const FX_CHAR* CFX_ByteString::c_str() const { |
+ return m_pData ? m_pData->m_String : ""; |
+} |
+ |
+const uint8_t* CFX_ByteString::raw_str() const { |
+ return m_pData ? reinterpret_cast<const uint8_t*>(m_pData->m_String) |
+ : nullptr; |
+} |
+ |
+CFX_ByteStringC CFX_ByteString::AsStringC() const { |
+ return CFX_ByteStringC(raw_str(), GetLength()); |
+} |
+ |
+FX_STRSIZE CFX_ByteString::GetLength() const { |
+ return m_pData ? m_pData->m_nDataLength : 0; |
+} |
+ |
+bool CFX_ByteString::IsEmpty() const { |
+ return !GetLength(); |
+} |
+ |
int CFX_ByteString::Compare(const CFX_ByteStringC& str) const { |
if (!m_pData) { |
return str.IsEmpty() ? 0 : -1; |