| Index: core/include/fxcrt/fx_string.h
|
| diff --git a/core/include/fxcrt/fx_string.h b/core/include/fxcrt/fx_string.h
|
| index 70f64932c8450e29637417c67055d9274a9f1144..1efb814b087ef5c8dcfe2d356c15bcfa87e14574 100644
|
| --- a/core/include/fxcrt/fx_string.h
|
| +++ b/core/include/fxcrt/fx_string.h
|
| @@ -7,6 +7,8 @@
|
| #ifndef _FX_STRING_H_
|
| #define _FX_STRING_H_
|
|
|
| +#include <algorithm>
|
| +
|
| #include "fx_memory.h"
|
|
|
| class CFX_ByteStringC;
|
| @@ -21,7 +23,7 @@ class CFX_WideStringL;
|
|
|
| // An immutable string with caller-provided storage which must outlive the
|
| // string itself.
|
| -class CFX_ByteStringC
|
| +class CFX_ByteStringC
|
| {
|
| public:
|
| typedef FX_CHAR value_type;
|
| @@ -100,7 +102,6 @@ public:
|
| {
|
| return str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length) != 0;
|
| }
|
| -#define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4))
|
|
|
| FX_DWORD GetID(FX_STRSIZE start_pos = 0) const;
|
|
|
| @@ -124,11 +125,6 @@ public:
|
| return m_Length == 0;
|
| }
|
|
|
| - operator FX_LPCBYTE() const
|
| - {
|
| - return m_Ptr;
|
| - }
|
| -
|
| FX_BYTE GetAt(FX_STRSIZE index) const
|
| {
|
| return m_Ptr[index];
|
| @@ -147,13 +143,23 @@ public:
|
| }
|
| return CFX_ByteStringC(m_Ptr + index, count);
|
| }
|
| -protected:
|
|
|
| - FX_LPCBYTE m_Ptr;
|
| + const FX_BYTE& operator[] (size_t index) const
|
| + {
|
| + return m_Ptr[index];
|
| + }
|
| +
|
| + bool operator< (const CFX_ByteStringC& that) const
|
| + {
|
| + int result = memcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
|
| + return result < 0 || (result == 0 && m_Length < that.m_Length);
|
| + }
|
|
|
| +protected:
|
| + FX_LPCBYTE m_Ptr;
|
| FX_STRSIZE m_Length;
|
| -private:
|
|
|
| +private:
|
| void* operator new (size_t) throw()
|
| {
|
| return NULL;
|
| @@ -161,6 +167,7 @@ private:
|
| };
|
| typedef const CFX_ByteStringC& FX_BSTR;
|
| #define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str-1)
|
| +#define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4))
|
| struct CFX_StringData {
|
|
|
| long m_nRefs;
|
| @@ -261,6 +268,12 @@ public:
|
| return !operator==(str);
|
| }
|
|
|
| + bool operator< (const CFX_ByteString& str) const
|
| + {
|
| + int result = FXSYS_memcmp32(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
|
| + return result < 0 || (result == 0 && GetLength() < str.GetLength());
|
| + }
|
| +
|
| void Empty();
|
|
|
| const CFX_ByteString& operator = (FX_LPCSTR str);
|
| @@ -428,7 +441,7 @@ inline CFX_ByteString operator + (FX_BSTR str1, const CFX_ByteString& str2)
|
| {
|
| return CFX_ByteString(str1, str2);
|
| }
|
| -class CFX_WideStringC
|
| +class CFX_WideStringC
|
| {
|
| public:
|
| typedef FX_WCHAR value_type;
|
| @@ -550,13 +563,23 @@ public:
|
| }
|
| return CFX_WideStringC(m_Ptr + m_Length - count, count);
|
| }
|
| -protected:
|
|
|
| - FX_LPCWSTR m_Ptr;
|
| + const FX_WCHAR& operator[] (size_t index) const
|
| + {
|
| + return m_Ptr[index];
|
| + }
|
|
|
| + bool operator< (const CFX_WideStringC& that) const
|
| + {
|
| + int result = wmemcmp(m_Ptr, that.m_Ptr, std::min(m_Length, that.m_Length));
|
| + return result < 0 || (result == 0 && m_Length < that.m_Length);
|
| + }
|
| +
|
| +protected:
|
| + FX_LPCWSTR m_Ptr;
|
| FX_STRSIZE m_Length;
|
| -private:
|
|
|
| +private:
|
| void* operator new (size_t) throw()
|
| {
|
| return NULL;
|
| @@ -646,6 +669,11 @@ public:
|
|
|
| const CFX_WideString& operator += (const CFX_WideStringC& str);
|
|
|
| + bool operator< (const CFX_WideString& str) const {
|
| + int result = wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
|
| + return result < 0 || (result == 0 && GetLength() < str.GetLength());
|
| + }
|
| +
|
| FX_WCHAR GetAt(FX_STRSIZE nIndex) const
|
| {
|
| return m_pData ? m_pData->m_String[nIndex] : 0;
|
|
|