//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (c) 1998-1998 Microsoft Corporation // // File: str.h // //-------------------------------------------------------------------------- // // string.h // #include #ifndef __BRSTRING_H__ #define __BRSTRING_H__ class Archive; class String { friend String operator+( const String& str1, const String& str2 ); friend String operator+( const String& str1, LPCSTR lpszStr ); friend String operator+( LPCSTR lpszStr, const String& str1 ); friend String operator+( const String& str1, char ch ); friend String operator+( char ch, const String& str1 ); public: String(); String( LPCSTR lpszStr ); String( const String& str ); String( LPCWSTR pszWstr ); ~String(); //BOOL LoadString( UINT nID, HINSTANCE hInstance ); BOOL IsEmpty() const { return ( m_wLength == 0 ); }; WORD GetLength() const { return m_wLength; }; int Compare( const String& str ) const { if (m_pBuf && str.m_pBuf) { return _wcsicmp( m_pBuf, str.m_pBuf ); } else if (!m_pBuf && !str.m_pBuf) { return 0; } else if (!m_pBuf) { return -1; } else { return 1; } }; int Compare( LPCWSTR lpwzStr ) const { if (m_pBuf && lpwzStr) { return _wcsicmp( m_pBuf, lpwzStr ); } else if (!m_pBuf && !lpwzStr) { return 0; } else if (!m_pBuf) { return -1; } else { return 1; } }; void Concat( const String& str ); void Concat( LPCWSTR lpwzStr ); void Concat( WCHAR wch ); void TrimTrailingSpaces(); WCHAR GetAt( UINT nIndex ) const { if( nIndex >= m_wLength ) { return L'\0'; } return m_pBuf[nIndex]; }; void SetAt( UINT nIndex, char ch ) { if( nIndex < m_wLength ) { m_pBuf[nIndex] = ch; } }; HRESULT ReadWCS( LPSTREAM pStream, DWORD cSize ); //HRESULT WriteWCS( LPSTREAM pStream ); // operators const String& operator+=( const String& str ) // concatenation { Concat( str ); return *this; }; const String& operator+=( LPCSTR lpszStr ) // concatenation { Concat( lpszStr ); return *this; }; const String& operator+=( char ch ) // concatenation { Concat( ch ); return *this; }; String& operator=( const String& str ); String& operator=( LPCSTR pszStr ); String& operator=( LPCWSTR pszWstr ); operator const WCHAR*() const { return m_pBuf; } private: WORD figureblocksize( WORD slen ) { ++slen; // for '\0' slen = static_cast( slen / sm_wBlockSize ); return static_cast( ( slen + 1 ) * sm_wBlockSize ); }; private: WORD m_wLength; WORD m_wAllocated; WCHAR* m_pBuf; static WORD sm_wBlockSize; // size blocks are allocated in for strings }; inline BOOL operator==( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) == 0 ); } inline BOOL operator==( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) == 0 ); } inline BOOL operator==( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) == 0 ); } inline BOOL operator!=( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) != 0 ); } inline BOOL operator!=( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) != 0 ); } inline BOOL operator!=( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) != 0 ); } inline BOOL operator<( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) < 0 ); } inline BOOL operator<( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) > 0 ); } inline BOOL operator<( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) < 0 ); } inline BOOL operator>( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) > 0 ); } inline BOOL operator>( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) < 0 ); } inline BOOL operator>( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) > 0 ); } inline BOOL operator<=( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) <= 0 ); } inline BOOL operator<=( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) >= 0 ); } inline BOOL operator<=( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) <= 0 ); } inline BOOL operator>=( const String& s1, const String& s2 ) { return ( s1.Compare( s2 ) >= 0 ); } inline BOOL operator>=( const WCHAR* s1, const String& s2 ) { return ( s2.Compare( s1 ) <= 0 ); } inline BOOL operator>=( const String& s1, const WCHAR* s2 ) { return ( s1.Compare( s2 ) >= 0 ); } #endif // __BRSTRING_H__