237 lines
4.8 KiB
C
237 lines
4.8 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (c) 1998-1998 Microsoft Corporation
|
||
|
//
|
||
|
// File: str.h
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
//
|
||
|
// string.h
|
||
|
//
|
||
|
|
||
|
#include <objbase.h>
|
||
|
|
||
|
#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<WORD>( slen / sm_wBlockSize );
|
||
|
return static_cast<WORD>( ( 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__
|