1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_STRING_H_ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FX_STRING_H_ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteStringC; 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteString; 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideStringC; 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideString; 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CFX_CharMap; 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_BinaryBuf; 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef int FX_STRSIZE; 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteStringL; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideStringL; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteStringC : public CFX_Object 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC() 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = NULL; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = 0; 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(FX_LPCBYTE ptr, FX_STRSIZE size) 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = ptr; 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = size; 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(FX_LPCSTR ptr) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)ptr; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = ptr ? (FX_STRSIZE)FXSYS_strlen(ptr) : 0; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(FX_CHAR& ch) 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)&ch; 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = 1; 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(FX_LPCSTR ptr, FX_STRSIZE len) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)ptr; 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (len == -1) { 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = (FX_STRSIZE)FXSYS_strlen(ptr); 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } else { 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = len; 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(const CFX_ByteStringC& src) 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = src.m_Ptr; 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.m_Length; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC(const CFX_ByteString& src); 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC& operator = (FX_LPCSTR src) 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)src; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = (FX_STRSIZE)FXSYS_strlen(src); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC& operator = (const CFX_ByteStringC& src) 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = src.m_Ptr; 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.m_Length; 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC& operator = (const CFX_ByteString& src); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator == (const CFX_ByteStringC& str) const 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return str.m_Length == m_Length && FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length) == 0; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator != (const CFX_ByteStringC& str) const 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length) != 0; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXBSTR_ID(c1, c2, c3, c4) ((c1 << 24) | (c2 << 16) | (c3 << 8) | (c4)) 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetID(FX_STRSIZE start_pos = 0) const; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE GetPtr() const 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Ptr; 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCSTR GetCStr() const 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (FX_LPCSTR)m_Ptr; 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE GetLength() const 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Length; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool IsEmpty() const 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Length == 0; 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator FX_LPCBYTE() const 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Ptr; 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE GetAt(FX_STRSIZE index) const 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Ptr[index]; 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (index < 0) { 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov index = 0; 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (index > m_Length) { 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteStringC(); 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count < 0 || count > m_Length - index) { 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = m_Length - index; 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteStringC(m_Ptr + index, count); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE m_Ptr; 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_Length; 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* operator new (size_t) throw() 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef const CFX_ByteStringC& FX_BSTR; 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_BSTRC(str) CFX_ByteStringC(str, sizeof str-1) 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CFX_StringData { 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov long m_nRefs; 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_nDataLength; 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_nAllocLength; 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_CHAR m_String[1]; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteString : public CFX_Object 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString() 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pData = NULL; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(const CFX_ByteString& str); 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(char ch); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(FX_LPCSTR ptr, FX_STRSIZE len = -1); 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(FX_LPCBYTE ptr, FX_STRSIZE len); 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(FX_BSTR bstrc); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString(FX_BSTR bstrc1, FX_BSTR bstrc2); 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_ByteString(); 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_ByteString FromUnicode(FX_LPCWSTR ptr, FX_STRSIZE len = -1); 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_ByteString FromUnicode(const CFX_WideString& str); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator FX_LPCSTR() const 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String : ""; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator FX_LPCBYTE() const 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? (FX_LPCBYTE)m_pData->m_String : NULL; 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE GetLength() const 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_nDataLength : 0; 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool IsEmpty() const 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !GetLength(); 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int Compare(FX_BSTR str) const; 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool Equal(FX_BSTR str) const; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool EqualNoCase(FX_BSTR str) const; 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator == (FX_LPCSTR str) const 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Equal(str); 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator == (FX_BSTR str) const 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return Equal(str); 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator == (const CFX_ByteString& str) const; 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator != (FX_LPCSTR str) const 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !Equal(str); 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator != (FX_BSTR str) const 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !Equal(str); 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator != (const CFX_ByteString& str) const 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !operator==(str); 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Empty(); 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator = (FX_LPCSTR str); 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator = (FX_BSTR bstrc); 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator = (const CFX_ByteString& stringSrc); 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator = (const CFX_BinaryBuf& buf); 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Load(FX_LPCBYTE str, FX_STRSIZE len); 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator += (FX_CHAR ch); 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator += (FX_LPCSTR str); 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator += (const CFX_ByteString& str); 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_ByteString& operator += (FX_BSTR bstrc); 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE GetAt(FX_STRSIZE nIndex) const 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String[nIndex] : 0; 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE operator[](FX_STRSIZE nIndex) const 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String[nIndex] : 0; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetAt(FX_STRSIZE nIndex, FX_CHAR ch); 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Insert(FX_STRSIZE index, FX_CHAR ch); 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1); 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Format(FX_LPCSTR lpszFormat, ... ); 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void FormatV(FX_LPCSTR lpszFormat, va_list argList); 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Reserve(FX_STRSIZE len); 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPSTR GetBuffer(FX_STRSIZE len); 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPSTR LockBuffer(); 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleaseBuffer(FX_STRSIZE len = -1); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString Mid(FX_STRSIZE first) const; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const; 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString Left(FX_STRSIZE count) const; 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString Right(FX_STRSIZE count) const; 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Find(FX_BSTR lpszSub, FX_STRSIZE start = 0) const; 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Find(FX_CHAR ch, FX_STRSIZE start = 0) const; 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE ReverseFind(FX_CHAR ch) const; 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void MakeLower(); 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void MakeUpper(); 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(); 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(FX_CHAR chTarget); 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(FX_BSTR lpszTargets); 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(); 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(FX_CHAR chTarget); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(FX_BSTR lpszTargets); 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Replace(FX_BSTR lpszOld, FX_BSTR lpszNew); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Remove(FX_CHAR ch); 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString UTF8Decode() const; 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConvertFrom(const CFX_WideString& str, CFX_CharMap* pCharMap = NULL); 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetID(FX_STRSIZE start_pos = 0) const; 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_ByteString LoadFromFile(FX_BSTR file_path); 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFORMAT_SIGNED 1 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFORMAT_HEX 2 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXFORMAT_CAPITAL 4 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_ByteString FormatInteger(int i, FX_DWORD flags = 0); 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_ByteString FormatFloat(FX_FLOAT f, int precision = 0); 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct CFX_StringData* m_pData; 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AllocCopy(CFX_ByteString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex, FX_STRSIZE nExtraLen) const; 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AssignCopy(FX_STRSIZE nSrcLen, FX_LPCSTR lpszSrcData); 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConcatCopy(FX_STRSIZE nSrc1Len, FX_LPCSTR lpszSrc1Data, FX_STRSIZE nSrc2Len, FX_LPCSTR lpszSrc2Data); 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConcatInPlace(FX_STRSIZE nSrcLen, FX_LPCSTR lpszSrcData); 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void CopyBeforeWrite(); 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AllocBeforeWrite(FX_STRSIZE nLen); 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteStringC::CFX_ByteStringC(const CFX_ByteString& src) 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)src; 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.GetLength(); 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteStringC& CFX_ByteStringC::operator = (const CFX_ByteString& src) 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCBYTE)src; 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.GetLength(); 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_BSTR str1, FX_BSTR str2) 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_BSTR str1, FX_LPCSTR str2) 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_LPCSTR str1, FX_BSTR str2) 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_BSTR str1, FX_CHAR ch) 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, CFX_ByteStringC(ch)); 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_CHAR ch, FX_BSTR str2) 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(ch, str2); 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (const CFX_ByteString& str1, const CFX_ByteString& str2) 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (const CFX_ByteString& str1, FX_CHAR ch) 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, CFX_ByteStringC(ch)); 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_CHAR ch, const CFX_ByteString& str2) 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(ch, str2); 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (const CFX_ByteString& str1, FX_LPCSTR str2) 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_LPCSTR str1, const CFX_ByteString& str2) 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (const CFX_ByteString& str1, FX_BSTR str2) 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString operator + (FX_BSTR str1, const CFX_ByteString& str2) 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString(str1, str2); 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_StringBufBase : public CFX_Object 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_StringBufBase(FX_STRSIZE limit) 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Size = 0; 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Limit = limit; 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_CHAR* GetPtr() const 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (FX_CHAR*)(this + 1); 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE GetSize() const 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Size; 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Empty() 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Size = 0; 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Copy(FX_BSTR str); 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Append(FX_BSTR str); 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Append(int i, FX_DWORD flags = 0); 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC GetStringC() const 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteStringC((FX_CHAR*)(this + 1), m_Size); 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetString() const 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString((FX_CHAR*)(this + 1), m_Size); 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_Limit; 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_Size; 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtemplate<FX_STRSIZE limit> 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_StringBufTemplate : public CFX_StringBufBase 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_StringBufTemplate() : CFX_StringBufBase(limit) {} 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_CHAR m_Buffer[limit]; 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef CFX_StringBufTemplate<256> CFX_StringBuf256; 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideStringC : public CFX_Object 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC() 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = NULL; 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = 0; 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC(FX_LPCWSTR ptr) 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = ptr; 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = ptr ? (FX_STRSIZE)FXSYS_wcslen(ptr) : 0; 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC(FX_WCHAR& ch) 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = &ch; 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = 1; 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC(FX_LPCWSTR ptr, FX_STRSIZE len) 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = ptr; 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (len == -1) { 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = (FX_STRSIZE)FXSYS_wcslen(ptr); 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } else { 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = len; 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC(const CFX_WideStringC& src) 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = src.m_Ptr; 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.m_Length; 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC(const CFX_WideString& src); 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC& operator = (FX_LPCWSTR src) 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = src; 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = (FX_STRSIZE)FXSYS_wcslen(src); 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC& operator = (const CFX_WideStringC& src) 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = src.m_Ptr; 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.m_Length; 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC& operator = (const CFX_WideString& src); 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator == (const CFX_WideStringC& str) const 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return str.m_Length == m_Length && FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length * sizeof(FX_WCHAR)) == 0; 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool operator != (const CFX_WideStringC& str) const 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_Length * sizeof(FX_WCHAR)) != 0; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCWSTR GetPtr() const 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Ptr; 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE GetLength() const 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Length; 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool IsEmpty() const 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Length == 0; 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_WCHAR GetAt(FX_STRSIZE index) const 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Ptr[index]; 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC Left(FX_STRSIZE count) const 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count < 1) { 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(); 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count > m_Length) { 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = m_Length; 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(m_Ptr, count); 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC Mid(FX_STRSIZE index, FX_STRSIZE count = -1) const 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (index < 0) { 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov index = 0; 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (index > m_Length) { 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(); 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count < 0 || count > m_Length - index) { 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = m_Length - index; 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(m_Ptr + index, count); 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringC Right(FX_STRSIZE count) const 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count < 1) { 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(); 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (count > m_Length) { 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = m_Length; 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideStringC(m_Ptr + m_Length - count, count); 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCWSTR m_Ptr; 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_Length; 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* operator new (size_t) throw() 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef const CFX_WideStringC& FX_WSTR; 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_WSTRC(wstr) CFX_WideStringC((FX_LPCWSTR)wstr, sizeof(wstr) / sizeof(FX_WCHAR) - 1) 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CFX_StringDataW { 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov long m_nRefs; 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_nDataLength; 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE m_nAllocLength; 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_WCHAR m_String[1]; 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideString : public CFX_Object 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString() 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pData = NULL; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString(const CFX_WideString& str); 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString(FX_LPCWSTR ptr, FX_STRSIZE len = -1) 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov InitStr(ptr, len); 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString(FX_WCHAR ch); 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString(const CFX_WideStringC& str); 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2); 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_WideString(); 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_WideString FromLocal(const char* str, FX_STRSIZE len = -1); 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_WideString FromUTF8(const char* str, FX_STRSIZE len = -1); 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len = -1); 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator FX_LPCWSTR() const 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String : (FX_WCHAR*)L""; 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Empty(); 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsEmpty() const 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !GetLength(); 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE GetLength() const 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_nDataLength : 0; 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator = (FX_LPCWSTR str); 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator =(const CFX_WideString& stringSrc); 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator =(const CFX_WideStringC& stringSrc); 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator += (FX_LPCWSTR str); 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator += (FX_WCHAR ch); 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator += (const CFX_WideString& str); 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const CFX_WideString& operator += (const CFX_WideStringC& str); 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_WCHAR GetAt(FX_STRSIZE nIndex) const 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String[nIndex] : 0; 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_WCHAR operator[](FX_STRSIZE nIndex) const 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pData ? m_pData->m_String[nIndex] : 0; 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetAt(FX_STRSIZE nIndex, FX_WCHAR ch); 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int Compare(FX_LPCWSTR str) const; 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int Compare(const CFX_WideString& str) const; 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int CompareNoCase(FX_LPCWSTR str) const; 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bool Equal(const CFX_WideStringC& str) const; 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString Mid(FX_STRSIZE first) const; 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const; 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString Left(FX_STRSIZE count) const; 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString Right(FX_STRSIZE count) const; 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Insert(FX_STRSIZE index, FX_WCHAR ch); 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1); 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Format(FX_LPCWSTR lpszFormat, ... ); 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void FormatV(FX_LPCWSTR lpszFormat, va_list argList); 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void MakeLower(); 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void MakeUpper(); 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(); 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(FX_WCHAR chTarget); 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(FX_LPCWSTR lpszTargets); 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(); 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(FX_WCHAR chTarget); 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimLeft(FX_LPCWSTR lpszTargets); 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Reserve(FX_STRSIZE len); 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPWSTR GetBuffer(FX_STRSIZE len); 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPWSTR LockBuffer(); 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleaseBuffer(FX_STRSIZE len = -1); 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetInteger() const; 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT GetFloat() const; 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Find(FX_LPCWSTR lpszSub, FX_STRSIZE start = 0) const; 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Find(FX_WCHAR ch, FX_STRSIZE start = 0) const; 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Replace(FX_LPCWSTR lpszOld, FX_LPCWSTR lpszNew); 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_STRSIZE Remove(FX_WCHAR ch); 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString UTF8Encode() const; 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString UTF16LE_Encode(FX_BOOL bTerminate = TRUE) const; 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConvertFrom(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL); 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitStr(FX_LPCWSTR ptr, int len); 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_StringDataW* m_pData; 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void CopyBeforeWrite(); 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AllocBeforeWrite(FX_STRSIZE nLen); 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConcatInPlace(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData); 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ConcatCopy(FX_STRSIZE nSrc1Len, FX_LPCWSTR lpszSrc1Data, FX_STRSIZE nSrc2Len, FX_LPCWSTR lpszSrc2Data); 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AssignCopy(FX_STRSIZE nSrcLen, FX_LPCWSTR lpszSrcData); 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AllocCopy(CFX_WideString& dest, FX_STRSIZE nCopyLen, FX_STRSIZE nCopyIndex, FX_STRSIZE nExtraLen) const; 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideStringC::CFX_WideStringC(const CFX_WideString& src) 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCWSTR)src; 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.GetLength(); 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideStringC& CFX_WideStringC::operator = (const CFX_WideString& src) 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Ptr = (FX_LPCWSTR)src; 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Length = src.GetLength(); 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return *this; 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideStringC& str2) 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideStringC& str1, FX_LPCWSTR str2) 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (FX_LPCWSTR str1, const CFX_WideStringC& str2) 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideStringC& str1, FX_WCHAR ch) 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, CFX_WideStringC(ch)); 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideStringC& str2) 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(ch, str2); 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideString& str2) 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideString& str1, FX_WCHAR ch) 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, CFX_WideStringC(ch)); 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (FX_WCHAR ch, const CFX_WideString& str2) 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(ch, str2); 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideString& str1, FX_LPCWSTR str2) 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (FX_LPCWSTR str1, const CFX_WideString& str2) 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideStringC& str2) 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideString& str2) 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_WideString(str1, str2); 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator==(const CFX_WideString& s1, const CFX_WideString& s2); 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator==(const CFX_WideString& s1, const CFX_WideStringC& s2); 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator==(const CFX_WideStringC& s1, const CFX_WideString& s2); 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator== (const CFX_WideString& s1, FX_LPCWSTR s2); 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator==(FX_LPCWSTR s1, const CFX_WideString& s2); 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator!=(const CFX_WideString& s1, const CFX_WideString& s2); 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator!=(const CFX_WideString& s1, const CFX_WideStringC& s2); 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator!=(const CFX_WideStringC& s1, const CFX_WideString& s2); 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator!= (const CFX_WideString& s1, FX_LPCWSTR s2); 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovbool operator!=(FX_LPCWSTR s1, const CFX_WideString& s2); 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT FX_atof(FX_BSTR str); 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid FX_atonum(FX_BSTR str, FX_BOOL& bInteger, void* pData); 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf); 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len); 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString FX_UTF8Encode(FX_WSTR wsStr) 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength()); 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovinline CFX_ByteString FX_UTF8Encode(const CFX_WideString &wsStr) 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FX_UTF8Encode((FX_LPCWSTR)wsStr, wsStr.GetLength()); 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_ByteStringL : public CFX_ByteStringC 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringL() : CFX_ByteStringC() {} 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_ByteStringL() {} 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Empty(IFX_Allocator* pAllocator); 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPSTR AllocBuffer(FX_STRSIZE length, IFX_Allocator* pAllocator); 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Set(FX_BSTR src, IFX_Allocator* pAllocator); 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_WideStringL : public CFX_WideStringC 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideStringL() : CFX_WideStringC() {} 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFX_WideStringL() {} 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Empty(IFX_Allocator* pAllocator); 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Set(FX_WSTR src, IFX_Allocator* pAllocator); 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetInteger() const; 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT GetFloat() const; 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void TrimRight(FX_LPCWSTR lpszTargets); 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len, CFX_ByteStringL &utf8Str, IFX_Allocator* pAllocator = NULL); 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 871