//****************************************************************************** // // Microsoft Confidential. Copyright (c) Microsoft Corporation 1999. All rights reserved // // File: RsopUtil.cpp // // Description: // // History: 8-20-99 leonardm Created // //****************************************************************************** #include #include "RsopUtil.h" #include //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::CWString() : _pW(NULL), _len(0), _bState(false) { _pW = new WCHAR[_len+1]; if(_pW) { HRESULT hr = StringCchCopy(_pW, _len + 1, L""); if(FAILED(hr)) { Reset(); return; } _bState = true; } } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::CWString(const CWString& s) : _pW(NULL), _len(0), _bState(false) { if(!s.ValidString()) { return; } _len = s._len; _pW = new WCHAR[_len+1]; if(_pW) { HRESULT hr = StringCchCopy(_pW, _len + 1, s._pW); if(FAILED(hr)) { Reset(); return; } _bState = true; } } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::CWString(const WCHAR* s) : _pW(NULL), _len(0), _bState(false) { if(s) { _len = wcslen(s); } _pW = new WCHAR[_len + 1]; if(_pW) { HRESULT hr = StringCchCopy(_pW, _len + 1, s ? s : L""); if(FAILED(hr)) { Reset(); return; } _bState = true; } } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::~CWString() { Reset(); } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString& CWString::operator = (const CWString& s) { if(&s == this) { return *this; } Reset(); if(s.ValidString()) { _len = s._len; _pW = new WCHAR[_len+1]; if(_pW) { HRESULT hr = StringCchCopy(_pW, _len + 1, s._pW); if(FAILED(hr)) { Reset(); return *this; } _bState = true; } } return *this; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString& CWString::operator = (const WCHAR* s) { Reset(); _len = s ? wcslen(s) : 0; _pW = new WCHAR[_len + 1]; if(_pW) { HRESULT hr = StringCchCopy(_pW, _len + 1, s ? s : L""); if(FAILED(hr)) { Reset(); return *this; } _bState = true; } return *this; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** void CWString::Reset() { if (_pW) delete[] _pW; _pW = NULL; _len =0; _bState = false; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString& CWString::operator += (const CWString& s) { if(!s.ValidString()) { Reset(); return *this; } int newLen = _len + s._len; WCHAR* pW = new WCHAR[newLen+1]; if(!pW) { Reset(); return *this; } HRESULT hr = StringCchCopy(pW, newLen + 1, _pW); if(SUCCEEDED(hr)) hr = StringCchCat(pW, newLen + 1, s._pW); if(FAILED(hr)) { delete [] pW; Reset(); return *this; } *this = pW; delete[] pW; return *this; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString CWString::operator + (const CWString& s) const { if(!s.ValidString()) { return *this; } CWString tmp; tmp.Reset(); tmp._len = _len + s._len; tmp._pW = new WCHAR[tmp._len+1]; if(!tmp._pW) { tmp.Reset(); return tmp; } HRESULT hr = StringCchCopy(tmp._pW, tmp._len + 1, _pW); if(SUCCEEDED(hr)) hr = StringCchCat(tmp._pW, tmp._len + 1, s._pW); if(FAILED(hr)) { tmp.Reset(); return tmp; } tmp._bState = true; return tmp; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString operator + (const WCHAR* s1, const CWString& s2) { CWString tmp; if(!s1 || !s2.ValidString()) { return tmp; } tmp.Reset(); tmp._len = wcslen(s1) + s2._len; tmp._pW = new WCHAR[tmp._len+1]; if(!tmp._pW) { tmp.Reset(); return tmp; } HRESULT hr = StringCchCopy(tmp._pW, tmp._len + 1, s1); if(SUCCEEDED(hr)) hr = StringCchCat(tmp._pW, tmp._len + 1, s2._pW); if(FAILED(hr)) { tmp.Reset(); return tmp; } tmp._bState = true; return tmp; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::operator const WCHAR* () const { return _pW; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** CWString::operator WCHAR* () const { return _pW; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::operator == (const WCHAR* s) const { CWString tmp = s; return (*this == tmp); } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::operator == (const CWString& s) const { if(!ValidString() || !s.ValidString()) { return false; } if(&s == this) { return true; } if(_len != s._len || _bState != s._bState) { return false; } if(_wcsicmp(s._pW, _pW) != 0) { return false; } return true; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::CaseSensitiveCompare(const CWString& s) const { if(!ValidString() || !s.ValidString()) { return false; } if(&s == this) { return true; } if(_len != s._len || _bState != s._bState) { return false; } if(wcscmp(s._pW, _pW) != 0) { return false; } return true; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::operator != (const CWString& s) const { return !(*this == s); } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::operator != (const WCHAR* s) const { CWString tmp = s; return !(*this == tmp); } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** int CWString::length() const { return _len; } //****************************************************************************** // // Function: // // Description: // // Parameters: // // Return: // // History: 8/20/99 leonardm Created. // //****************************************************************************** bool CWString::ValidString() const { return _bState; }