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.

527 lines
9.8 KiB

  1. //******************************************************************************
  2. //
  3. // Microsoft Confidential. Copyright (c) Microsoft Corporation 1999. All rights reserved
  4. //
  5. // File: RsopUtil.cpp
  6. //
  7. // Description:
  8. //
  9. // History: 8-20-99 leonardm Created
  10. //
  11. //******************************************************************************
  12. #include <windows.h>
  13. #include "RsopUtil.h"
  14. //******************************************************************************
  15. //
  16. // Function:
  17. //
  18. // Description:
  19. //
  20. // Parameters:
  21. //
  22. // Return:
  23. //
  24. // History: 8/20/99 leonardm Created.
  25. //
  26. //******************************************************************************
  27. CWString::CWString() : _pW(NULL), _len(0), _bState(false)
  28. {
  29. _pW = new WCHAR[_len+1];
  30. if(_pW)
  31. {
  32. wcscpy(_pW, L"");
  33. _bState = true;
  34. }
  35. }
  36. //******************************************************************************
  37. //
  38. // Function:
  39. //
  40. // Description:
  41. //
  42. // Parameters:
  43. //
  44. // Return:
  45. //
  46. // History: 8/20/99 leonardm Created.
  47. //
  48. //******************************************************************************
  49. CWString::CWString(const CWString& s) : _pW(NULL), _len(0), _bState(false)
  50. {
  51. if(!s.ValidString())
  52. {
  53. return;
  54. }
  55. _len = s._len;
  56. _pW = new WCHAR[_len+1];
  57. if(_pW)
  58. {
  59. wcscpy(_pW, s._pW);
  60. _bState = true;
  61. }
  62. }
  63. //******************************************************************************
  64. //
  65. // Function:
  66. //
  67. // Description:
  68. //
  69. // Parameters:
  70. //
  71. // Return:
  72. //
  73. // History: 8/20/99 leonardm Created.
  74. //
  75. //******************************************************************************
  76. CWString::CWString(const WCHAR* s) : _pW(NULL), _len(0), _bState(false)
  77. {
  78. if(s)
  79. {
  80. _len = wcslen(s);
  81. }
  82. _pW = new WCHAR[_len+1];
  83. if(_pW)
  84. {
  85. wcscpy(_pW, s ? s : L"");
  86. _bState = true;
  87. }
  88. }
  89. //******************************************************************************
  90. //
  91. // Function:
  92. //
  93. // Description:
  94. //
  95. // Parameters:
  96. //
  97. // Return:
  98. //
  99. // History: 8/20/99 leonardm Created.
  100. //
  101. //******************************************************************************
  102. CWString::~CWString()
  103. {
  104. Reset();
  105. }
  106. //******************************************************************************
  107. //
  108. // Function:
  109. //
  110. // Description:
  111. //
  112. // Parameters:
  113. //
  114. // Return:
  115. //
  116. // History: 8/20/99 leonardm Created.
  117. //
  118. //******************************************************************************
  119. CWString& CWString::operator = (const CWString& s)
  120. {
  121. if(&s == this)
  122. {
  123. return *this;
  124. }
  125. Reset();
  126. if(s.ValidString())
  127. {
  128. _len = s._len;
  129. _pW = new WCHAR[_len+1];
  130. if(_pW)
  131. {
  132. wcscpy(_pW, s._pW);
  133. _bState = true;
  134. }
  135. }
  136. return *this;
  137. }
  138. //******************************************************************************
  139. //
  140. // Function:
  141. //
  142. // Description:
  143. //
  144. // Parameters:
  145. //
  146. // Return:
  147. //
  148. // History: 8/20/99 leonardm Created.
  149. //
  150. //******************************************************************************
  151. CWString& CWString::operator = (const WCHAR* s)
  152. {
  153. Reset();
  154. _len = s ? wcslen(s) : 0;
  155. _pW = new WCHAR[_len+1];
  156. if(_pW)
  157. {
  158. wcscpy(_pW, s ? s : L"");
  159. _bState = true;
  160. }
  161. return *this;
  162. }
  163. //******************************************************************************
  164. //
  165. // Function:
  166. //
  167. // Description:
  168. //
  169. // Parameters:
  170. //
  171. // Return:
  172. //
  173. // History: 8/20/99 leonardm Created.
  174. //
  175. //******************************************************************************
  176. void CWString::Reset()
  177. {
  178. if (_pW)
  179. delete[] _pW;
  180. _pW = NULL;
  181. _len =0;
  182. _bState = false;
  183. }
  184. //******************************************************************************
  185. //
  186. // Function:
  187. //
  188. // Description:
  189. //
  190. // Parameters:
  191. //
  192. // Return:
  193. //
  194. // History: 8/20/99 leonardm Created.
  195. //
  196. //******************************************************************************
  197. CWString& CWString::operator += (const CWString& s)
  198. {
  199. if(!s.ValidString())
  200. {
  201. Reset();
  202. return *this;
  203. }
  204. int newLen = _len + s._len;
  205. WCHAR* pW = new WCHAR[newLen+1];
  206. if(!pW)
  207. {
  208. Reset();
  209. return *this;
  210. }
  211. wcscpy(pW, _pW);
  212. wcscat(pW, s._pW);
  213. *this = pW;
  214. delete[] pW;
  215. return *this;
  216. }
  217. //******************************************************************************
  218. //
  219. // Function:
  220. //
  221. // Description:
  222. //
  223. // Parameters:
  224. //
  225. // Return:
  226. //
  227. // History: 8/20/99 leonardm Created.
  228. //
  229. //******************************************************************************
  230. CWString CWString::operator + (const CWString& s) const
  231. {
  232. if(!s.ValidString())
  233. {
  234. return *this;
  235. }
  236. CWString tmp;
  237. tmp.Reset();
  238. tmp._len = _len + s._len;
  239. tmp._pW = new WCHAR[tmp._len+1];
  240. if(!tmp._pW)
  241. {
  242. tmp.Reset();
  243. return tmp;
  244. }
  245. wcscpy(tmp._pW, _pW);
  246. wcscat(tmp._pW, s._pW);
  247. return tmp;
  248. }
  249. //******************************************************************************
  250. //
  251. // Function:
  252. //
  253. // Description:
  254. //
  255. // Parameters:
  256. //
  257. // Return:
  258. //
  259. // History: 8/20/99 leonardm Created.
  260. //
  261. //******************************************************************************
  262. CWString operator + (const WCHAR* s1, const CWString& s2)
  263. {
  264. CWString tmp;
  265. if(!s1 || !s2.ValidString())
  266. {
  267. return tmp;
  268. }
  269. tmp.Reset();
  270. tmp._len = wcslen(s1) + s2._len;
  271. tmp._pW = new WCHAR[tmp._len+1];
  272. if(!tmp._pW)
  273. {
  274. tmp.Reset();
  275. return tmp;
  276. }
  277. wcscpy(tmp._pW, s1);
  278. wcscat(tmp._pW, s2._pW);
  279. return tmp;
  280. }
  281. //******************************************************************************
  282. //
  283. // Function:
  284. //
  285. // Description:
  286. //
  287. // Parameters:
  288. //
  289. // Return:
  290. //
  291. // History: 8/20/99 leonardm Created.
  292. //
  293. //******************************************************************************
  294. CWString::operator const WCHAR* () const
  295. {
  296. return _pW;
  297. }
  298. //******************************************************************************
  299. //
  300. // Function:
  301. //
  302. // Description:
  303. //
  304. // Parameters:
  305. //
  306. // Return:
  307. //
  308. // History: 8/20/99 leonardm Created.
  309. //
  310. //******************************************************************************
  311. CWString::operator WCHAR* () const
  312. {
  313. return _pW;
  314. }
  315. //******************************************************************************
  316. //
  317. // Function:
  318. //
  319. // Description:
  320. //
  321. // Parameters:
  322. //
  323. // Return:
  324. //
  325. // History: 8/20/99 leonardm Created.
  326. //
  327. //******************************************************************************
  328. bool CWString::operator == (const WCHAR* s) const
  329. {
  330. CWString tmp = s;
  331. return (*this == tmp);
  332. }
  333. //******************************************************************************
  334. //
  335. // Function:
  336. //
  337. // Description:
  338. //
  339. // Parameters:
  340. //
  341. // Return:
  342. //
  343. // History: 8/20/99 leonardm Created.
  344. //
  345. //******************************************************************************
  346. bool CWString::operator == (const CWString& s) const
  347. {
  348. if(!ValidString() || !s.ValidString())
  349. {
  350. return false;
  351. }
  352. if(&s == this)
  353. {
  354. return true;
  355. }
  356. if(_len != s._len || _bState != s._bState)
  357. {
  358. return false;
  359. }
  360. if(_wcsicmp(s._pW, _pW) != 0)
  361. {
  362. return false;
  363. }
  364. return true;
  365. }
  366. //******************************************************************************
  367. //
  368. // Function:
  369. //
  370. // Description:
  371. //
  372. // Parameters:
  373. //
  374. // Return:
  375. //
  376. // History: 8/20/99 leonardm Created.
  377. //
  378. //******************************************************************************
  379. bool CWString::CaseSensitiveCompare(const CWString& s) const
  380. {
  381. if(!ValidString() || !s.ValidString())
  382. {
  383. return false;
  384. }
  385. if(&s == this)
  386. {
  387. return true;
  388. }
  389. if(_len != s._len || _bState != s._bState)
  390. {
  391. return false;
  392. }
  393. if(wcscmp(s._pW, _pW) != 0)
  394. {
  395. return false;
  396. }
  397. return true;
  398. }
  399. //******************************************************************************
  400. //
  401. // Function:
  402. //
  403. // Description:
  404. //
  405. // Parameters:
  406. //
  407. // Return:
  408. //
  409. // History: 8/20/99 leonardm Created.
  410. //
  411. //******************************************************************************
  412. bool CWString::operator != (const CWString& s) const
  413. {
  414. return !(*this == s);
  415. }
  416. //******************************************************************************
  417. //
  418. // Function:
  419. //
  420. // Description:
  421. //
  422. // Parameters:
  423. //
  424. // Return:
  425. //
  426. // History: 8/20/99 leonardm Created.
  427. //
  428. //******************************************************************************
  429. bool CWString::operator != (const WCHAR* s) const
  430. {
  431. CWString tmp = s;
  432. return !(*this == tmp);
  433. }
  434. //******************************************************************************
  435. //
  436. // Function:
  437. //
  438. // Description:
  439. //
  440. // Parameters:
  441. //
  442. // Return:
  443. //
  444. // History: 8/20/99 leonardm Created.
  445. //
  446. //******************************************************************************
  447. int CWString::length() const
  448. {
  449. return _len;
  450. }
  451. //******************************************************************************
  452. //
  453. // Function:
  454. //
  455. // Description:
  456. //
  457. // Parameters:
  458. //
  459. // Return:
  460. //
  461. // History: 8/20/99 leonardm Created.
  462. //
  463. //******************************************************************************
  464. bool CWString::ValidString() const
  465. {
  466. return _bState;
  467. }