Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 lines
3.4 KiB

  1. //+---------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 2000.
  5. //
  6. // File: U S T R I N G . H
  7. //
  8. // Contents: Simple string class
  9. //
  10. // Notes:
  11. //
  12. // Author: mbend 17 Aug 2000
  13. //
  14. //----------------------------------------------------------------------------
  15. #pragma once
  16. class CUString
  17. {
  18. public:
  19. CUString() : m_sz(NULL) {}
  20. ~CUString()
  21. {
  22. Clear();
  23. }
  24. long GetLength() const
  25. {
  26. return m_sz ? lstrlenW(m_sz) : 0;
  27. }
  28. const wchar_t * GetBuffer() const
  29. {
  30. return m_sz;
  31. }
  32. operator const wchar_t *() const
  33. {
  34. return m_sz;
  35. }
  36. wchar_t & operator[](long nIndex)
  37. {
  38. Assert(m_sz && GetLength() > nIndex && nIndex >= 0);
  39. return m_sz[nIndex];
  40. }
  41. wchar_t operator[](long nIndex) const
  42. {
  43. Assert(m_sz && GetLength() > nIndex && nIndex >= 0);
  44. return m_sz[nIndex];
  45. }
  46. bool operator==(const CUString & ref) const
  47. {
  48. return !Cmp(ref);
  49. }
  50. bool operator==(const wchar_t * sz) const
  51. {
  52. return !Cmp(sz);
  53. }
  54. bool operator<(const CUString & ref) const
  55. {
  56. return Cmp(ref) < 0;
  57. }
  58. bool operator<(const wchar_t * sz) const
  59. {
  60. return Cmp(sz) < 0;
  61. }
  62. bool operator>(const CUString & ref) const
  63. {
  64. return Cmp(ref) > 0;
  65. }
  66. bool operator>(const wchar_t * sz) const
  67. {
  68. return Cmp(sz) > 0;
  69. }
  70. bool operator<=(const CUString & ref) const
  71. {
  72. return Cmp(ref) <= 0;
  73. }
  74. bool operator<=(const wchar_t * sz) const
  75. {
  76. return Cmp(sz) <= 0;
  77. }
  78. bool operator>=(const CUString & ref) const
  79. {
  80. return Cmp(ref) >= 0;
  81. }
  82. bool operator>=(const wchar_t * sz) const
  83. {
  84. return Cmp(sz) >= 0;
  85. }
  86. HRESULT HrAssign(const CUString & ref)
  87. {
  88. if(&ref == this)
  89. {
  90. return S_OK;
  91. }
  92. return HrAssign(ref.m_sz);
  93. }
  94. HRESULT HrAssign(const wchar_t * sz);
  95. HRESULT HrAssign(const char * sz);
  96. HRESULT HrAppend(const CUString & ref)
  97. {
  98. return HrAppend(ref.m_sz);
  99. }
  100. HRESULT HrAppend(const wchar_t * sz);
  101. void Clear()
  102. {
  103. delete [] m_sz;
  104. m_sz = NULL;
  105. }
  106. void Transfer(CUString & ref)
  107. {
  108. delete [] m_sz;
  109. m_sz = ref.m_sz;
  110. ref.m_sz = NULL;
  111. }
  112. HRESULT HrPrintf(const wchar_t * szFormat, ...);
  113. #ifndef _UPNP_SSDP
  114. HRESULT HrGetBSTR(BSTR * pbstr) const;
  115. HRESULT HrGetCOM(wchar_t ** psz) const;
  116. HRESULT HrInitFromGUID(const GUID & guid);
  117. #endif
  118. // Multibyte helper routines
  119. long CcbGetMultiByteLength() const;
  120. HRESULT HrGetMultiByte(char * szBuf, long ccbLength) const;
  121. HRESULT HrGetMultiByteWithAlloc(char ** pszBuf) const;
  122. private:
  123. long Cmp(const wchar_t * sz) const
  124. {
  125. if(!m_sz && !sz)
  126. {
  127. return 0;
  128. }
  129. if(!m_sz)
  130. {
  131. return -1;
  132. }
  133. if(!sz)
  134. {
  135. return 1;
  136. }
  137. return lstrcmpW(m_sz, sz);
  138. }
  139. long Cmp(const CUString & ref) const
  140. {
  141. return Cmp(ref.m_sz);
  142. }
  143. wchar_t * m_sz;
  144. };
  145. inline HRESULT HrTypeAssign(CUString & dst, const CUString & src)
  146. {
  147. return dst.HrAssign(src);
  148. }
  149. inline void TypeTransfer(CUString & dst, CUString & src)
  150. {
  151. dst.Transfer(src);
  152. }
  153. inline void TypeClear(CUString & type)
  154. {
  155. type.Clear();
  156. }