SpString.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:10k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CSPString;
  7. like CString
  8. */
  9. #if !defined( __SP_STRING_H__)
  10. #define __SP_STRING_H__
  11. #include <TCHAR.h>
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CSPString
  14. struct CSPStringData
  15. {
  16. long nRefs;             // reference count
  17. int nDataLength;        // length of data (including terminator)
  18. int nAllocLength;       // length of allocation
  19. // TCHAR data[nAllocLength]
  20. TCHAR* data()           // TCHAR* to managed data
  21. { return (TCHAR*)(this+1); }
  22. };
  23. class STKLIB_API CSPString
  24. {
  25. public:
  26. // Constructors
  27. // constructs empty CSPString
  28. CSPString();
  29. // copy constructor
  30. CSPString(const CSPString& stringSrc);
  31. // from a single character
  32. CSPString(TCHAR ch, int nRepeat = 1);
  33. // from an ANSI string (converts to TCHAR)
  34. CSPString(LPCSTR lpsz);
  35. // from a UNICODE string (converts to TCHAR)
  36. CSPString(LPCWSTR lpsz);
  37. // subset of characters from an ANSI string (converts to TCHAR)
  38. CSPString(LPCSTR lpch, int nLength);
  39. // subset of characters from a UNICODE string (converts to TCHAR)
  40. CSPString(LPCWSTR lpch, int nLength);
  41. // from unsigned characters
  42. CSPString(const unsigned char* psz);
  43. // Attributes & Operations
  44. // get data length
  45. int GetLength() const;
  46. // TRUE if zero length
  47. BOOL IsEmpty() const;
  48. // clear contents to empty
  49. void Empty();
  50. // return single character at zero-based index
  51. TCHAR GetAt(int nIndex) const;
  52. // return single character at zero-based index
  53. TCHAR operator[](int nIndex) const;
  54. // set a single character at zero-based index
  55. void SetAt(int nIndex, TCHAR ch);
  56. // return pointer to const string
  57. operator LPCTSTR() const;
  58. // overloaded assignment
  59. // ref-counted copy from another CSPString
  60. const CSPString& operator=(const CSPString& stringSrc);
  61. // set string content to single character
  62. const CSPString& operator=(TCHAR ch);
  63. #ifdef _UNICODE
  64. const CSPString& operator=(char ch);
  65. #endif
  66. // copy string content from ANSI string (converts to TCHAR)
  67. const CSPString& operator=(LPCSTR lpsz);
  68. // copy string content from UNICODE string (converts to TCHAR)
  69. const CSPString& operator=(LPCWSTR lpsz);
  70. // copy string content from unsigned chars
  71. const CSPString& operator=(const unsigned char* psz);
  72. // string concatenation
  73. // concatenate from another CSPString
  74. const CSPString& operator+=(const CSPString& string);
  75. // concatenate a single character
  76. const CSPString& operator+=(TCHAR ch);
  77. #ifdef _UNICODE
  78. // concatenate an ANSI character after converting it to TCHAR
  79. const CSPString& operator+=(char ch);
  80. #endif
  81. // concatenate a UNICODE character after converting it to TCHAR
  82. const CSPString& operator+=(LPCTSTR lpsz);
  83. STKLIB_API friend CSPString __stdcall operator+(const CSPString& string1,
  84. const CSPString& string2);
  85. STKLIB_API friend CSPString __stdcall operator+(const CSPString& string, TCHAR ch);
  86. STKLIB_API friend CSPString __stdcall operator+(TCHAR ch, const CSPString& string);
  87. #ifdef _UNICODE
  88. STKLIB_API friend CSPString __stdcall operator+(const CSPString& string, char ch);
  89. STKLIB_API friend CSPString __stdcall operator+(char ch, const CSPString& string);
  90. #endif
  91. STKLIB_API friend CSPString __stdcall operator+(const CSPString& string, LPCTSTR lpsz);
  92. STKLIB_API friend CSPString __stdcall operator+(LPCTSTR lpsz, const CSPString& string);
  93. // string comparison
  94. // straight character comparison
  95. int Compare(LPCTSTR lpsz) const;
  96. // compare ignoring case
  97. int CompareNoCase(LPCTSTR lpsz) const;
  98. // NLS aware comparison, case sensitive
  99. int Collate(LPCTSTR lpsz) const;
  100. // NLS aware comparison, case insensitive
  101. int CollateNoCase(LPCTSTR lpsz) const;
  102. // simple sub-string extraction
  103. // return nCount characters starting at zero-based nFirst
  104. CSPString Mid(int nFirst, int nCount) const;
  105. // return all characters starting at zero-based nFirst
  106. CSPString Mid(int nFirst) const;
  107. // return first nCount characters in string
  108. CSPString Left(int nCount) const;
  109. // return nCount characters from end of string
  110. CSPString Right(int nCount) const;
  111. //  characters from beginning that are also in passed string
  112. CSPString SpanIncluding(LPCTSTR lpszCharSet) const;
  113. // characters from beginning that are not also in passed string
  114. CSPString SpanExcluding(LPCTSTR lpszCharSet) const;
  115. // upper/lower/reverse conversion
  116. // NLS aware conversion to uppercase
  117. void MakeUpper();
  118. // NLS aware conversion to lowercase
  119. void MakeLower();
  120. // reverse string right-to-left
  121. void MakeReverse();
  122. // trimming whitespace (either side)
  123. // remove whitespace starting from right edge
  124. void TrimRight();
  125. // remove whitespace starting from left side
  126. void TrimLeft();
  127. // trimming anything (either side)
  128. // remove continuous occurrences of chTarget starting from right
  129. void TrimRight(TCHAR chTarget);
  130. // remove continuous occcurrences of characters in passed string,
  131. // starting from right
  132. void TrimRight(LPCTSTR lpszTargets);
  133. // remove continuous occurrences of chTarget starting from left
  134. void TrimLeft(TCHAR chTarget);
  135. // remove continuous occcurrences of characters in
  136. // passed string, starting from left
  137. void TrimLeft(LPCTSTR lpszTargets);
  138. // advanced manipulation
  139. // replace occurrences of chOld with chNew
  140. int Replace(TCHAR chOld, TCHAR chNew);
  141. // replace occurrences of substring lpszOld with lpszNew;
  142. // empty lpszNew removes instances of lpszOld
  143. int Replace(LPCTSTR lpszOld, LPCTSTR lpszNew);
  144. // remove occurrences of chRemove
  145. int Remove(TCHAR chRemove);
  146. // insert character at zero-based index; concatenates
  147. // if index is past end of string
  148. int Insert(int nIndex, TCHAR ch);
  149. // insert substring at zero-based index; concatenates
  150. // if index is past end of string
  151. int Insert(int nIndex, LPCTSTR pstr);
  152. // delete nCount characters starting at zero-based index
  153. int Delete(int nIndex, int nCount = 1);
  154. // searching
  155. // find character starting at left, -1 if not found
  156. int Find(TCHAR ch) const;
  157. // find character starting at right
  158. int ReverseFind(TCHAR ch) const;
  159. // find character starting at zero-based index and going right
  160. int Find(TCHAR ch, int nStart) const;
  161. // find first instance of any character in passed string
  162. int FindOneOf(LPCTSTR lpszCharSet) const;
  163. // find first instance of substring
  164. int Find(LPCTSTR lpszSub) const;
  165. // find first instance of substring starting at zero-based index
  166. int Find(LPCTSTR lpszSub, int nStart) const;
  167. // simple formatting
  168. // printf-like formatting using passed string
  169. void __cdecl Format(LPCTSTR lpszFormat, ...);
  170. // printf-like formatting using referenced string resource
  171. void __cdecl Format(UINT nFormatID, ...);
  172. // printf-like formatting using variable arguments parameter
  173. void FormatV(LPCTSTR lpszFormat, va_list argList);
  174. // load from string resource
  175. BOOL LoadString(UINT nID);
  176. // Access to string implementation buffer as "C" character array
  177. // get pointer to modifiable buffer at least as long as nMinBufLength
  178. LPTSTR GetBuffer(int nMinBufLength);
  179. // release buffer, setting length to nNewLength (or to first nul if -1)
  180. void ReleaseBuffer(int nNewLength = -1);
  181. // get pointer to modifiable buffer exactly as long as nNewLength
  182. LPTSTR GetBufferSetLength(int nNewLength);
  183. // release memory allocated to but unused by string
  184. void FreeExtra();
  185. // Use LockBuffer/UnlockBuffer to turn refcounting off
  186. // turn refcounting back on
  187. LPTSTR LockBuffer();
  188. // turn refcounting off
  189. void UnlockBuffer();
  190. // Implementation
  191. public:
  192. ~CSPString();
  193. int GetAllocLength() const;
  194. protected:
  195. LPTSTR m_pchData;   // pointer to ref counted string data
  196. // implementation helpers
  197. CSPStringData* GetData() const;
  198. void Init();
  199. void AllocCopy(CSPString& dest, int nCopyLen, int nCopyIndex, int nExtraLen) const;
  200. void AllocBuffer(int nLen);
  201. void AssignCopy(int nSrcLen, LPCTSTR lpszSrcData);
  202. void ConcatCopy(int nSrc1Len, LPCTSTR lpszSrc1Data, int nSrc2Len, LPCTSTR lpszSrc2Data);
  203. void ConcatInPlace(int nSrcLen, LPCTSTR lpszSrcData);
  204. void CopyBeforeWrite();
  205. void AllocBeforeWrite(int nLen);
  206. void Release();
  207. static void PASCAL Release(CSPStringData* pData);
  208. static int PASCAL SafeStrlen(LPCTSTR lpsz);
  209. static void __fastcall FreeData(CSPStringData* pData);
  210. };
  211. // Compare helpers
  212. bool __stdcall operator==(const CSPString& s1, const CSPString& s2);
  213. bool __stdcall operator==(const CSPString& s1, LPCTSTR s2);
  214. bool __stdcall operator==(LPCTSTR s1, const CSPString& s2);
  215. bool __stdcall operator!=(const CSPString& s1, const CSPString& s2);
  216. bool __stdcall operator!=(const CSPString& s1, LPCTSTR s2);
  217. bool __stdcall operator!=(LPCTSTR s1, const CSPString& s2);
  218. bool __stdcall operator<(const CSPString& s1, const CSPString& s2);
  219. bool __stdcall operator<(const CSPString& s1, LPCTSTR s2);
  220. bool __stdcall operator<(LPCTSTR s1, const CSPString& s2);
  221. bool __stdcall operator>(const CSPString& s1, const CSPString& s2);
  222. bool __stdcall operator>(const CSPString& s1, LPCTSTR s2);
  223. bool __stdcall operator>(LPCTSTR s1, const CSPString& s2);
  224. bool __stdcall operator<=(const CSPString& s1, const CSPString& s2);
  225. bool __stdcall operator<=(const CSPString& s1, LPCTSTR s2);
  226. bool __stdcall operator<=(LPCTSTR s1, const CSPString& s2);
  227. bool __stdcall operator>=(const CSPString& s1, const CSPString& s2);
  228. bool __stdcall operator>=(const CSPString& s1, LPCTSTR s2);
  229. bool __stdcall operator>=(LPCTSTR s1, const CSPString& s2);
  230. // Globals
  231. extern STKLIB_API TCHAR afxSPChNil;
  232. #ifdef _AFXDLL
  233. const CSPString& __stdcall AfxGetEmptySPString();
  234. #define afxEmptySPString AfxGetEmptySPString()
  235. #else
  236. extern LPCTSTR _afxSPPchNil;
  237. #define afxEmptySPString ((CSPString&)*(CSPString*)&_afxSPPchNil)
  238. #endif
  239. #ifdef _SP_ENABLE_INLINES
  240. #define _SPSTRING_INLINE inline
  241. #include "SpString.inl"
  242. #undef _SPSTRING_INLINE
  243. #endif
  244. #endif //__SP_STRING_H__